18305177067 发表于 2023-2-5 22:03:10

想要输出I love FishC,..from class{cls.__name__}确输出了<bound method ? of

class D:
        @classmethod
        @property
        def __doc__(cls):
                return f"I love FishC,..from class{cls.__name__}"

       
d=D()
d.__doc__

18305177067 发表于 2023-2-5 22:03:28

请求大佬帮助

isdkz 发表于 2023-2-5 22:06:22

本帖最后由 isdkz 于 2023-2-5 22:32 编辑

这个输出有问题吗?

>>> class D:
...         @classmethod
...         @property
...         def __doc__(cls):
...               return f"I love FishC,..from class{cls.__name__}"
...
>>>
>>> d=D()
>>> d.__doc__
'I love FishC,..from classD'
>>>



输出了 <bound method应该是你漏掉了 @property

>>> class D:
...         @classmethod
...         def __doc__(cls):
...               return f"I love FishC,..from class{cls.__name__}"
...
>>>
>>> d=D()
>>> d.__doc__
<bound method D.__doc__ of <class '__main__.D'>>
>>>

ba21 发表于 2023-2-5 22:12:17

class D:
    'I love FishC,..from class{cls.__name__}'
    @classmethod
    @property
    def test(self):
      pass


      
d=D()
print(d.__doc__)



每个对象都会有一个__doc__属性,用于描述该对象的作用。在一个模块被import时,其文件中的某些特殊的字符串会被python解释器保存在相应对象的__doc__属性中。比如,一个模块有模块的__doc__,一个class或function也有其对应的__doc__属性。在python中,一个模块其实就是一个.py文件。在文件中特殊的地方书写的字符串就是所谓的docstrings,就是将被放到__doc__的内容。这个“特殊的地方”包括:

1. 一个文件任何一条可执行的代码之前#模块的__doc__

2. 一个类,在类定义语句后,任何可执行代码前#类的__doc__

3. 一个函数,在函数定义语句后,任何可执行代码前#函数的__doc__

举个例子:

#use__doc__ 属性
class MyClass:
    'string.'
    def printSay():
      'print say welcome to you.'
      print 'say welcome to you.'
print MyClass.__doc__
print MyClass.printSay.__doc__

#输出结果
string.
print say welcome to you.

chinajz 发表于 2023-2-5 22:15:31

class D:
      @classmethod
      @property
      def __doc__(cls):
                return f"I love FishC,..from class {cls.__name__}"
      
d=D()
print(d.__doc__)
运行:
I love FishC,..from class D

歌者文明清理员 发表于 2023-2-6 11:50:46

本帖最后由 歌者文明清理员 于 2023-2-6 11:53 编辑

Def doc代表doc是一个类的方法(method)
D.__doc__是实力d的doc属性/方法
所以他会提示doc是方法(函数)
(打字问题请见谅)
#改成
class D:
    __doc__ = ' I love fishc, from class ' + __name__
print(D().__doc__)
或者类部分不动,其他改成
print(D().__doc__())

18305177067 发表于 2023-2-6 14:36:17

isdkz 发表于 2023-2-5 22:06
这个输出有问题吗?




第3行@property,但是结果还是显示bound method

isdkz 发表于 2023-2-6 14:42:29

18305177067 发表于 2023-2-6 14:36
第3行@property,但是结果还是显示bound method

有截图吗?

18305177067 发表于 2023-2-6 15:21:31

歌者文明清理员 发表于 2023-2-6 11:50
Def doc代表doc是一个类的方法(method)
D.__doc__是实力d的doc属性/方法
所以他会提示doc是方法(函数 ...

代码没问题。输出结果为I love FishC,..from class{cls.__name__},其中{cls.__name__}无法改变

歌者文明清理员 发表于 2023-2-6 15:22:59

18305177067 发表于 2023-2-6 15:21
代码没问题。输出结果为I love FishC,..from class{cls.__name__},其中{cls.__name__}无法改变

很奇怪的问题。在字符串前面加f了吗

歌者文明清理员 发表于 2023-2-6 15:24:01

歌者文明清理员 发表于 2023-2-6 15:22
很奇怪的问题。在字符串前面加f了吗

看看这个。

ouyunfu 发表于 2023-2-6 16:54:10

The code you posted will result in an AttributeError, because the __doc__ property of the D class is being redefined as a class method decorated with the property decorator.

By using the property decorator, you are indicating that the __doc__ method should behave as a read-only property. However, the __doc__ attribute is already a built-in property of Python classes that provides the docstring for the class.

If you want to define a custom property for the D class, you should give it a different name, such as doc, and use the property decorator to define it:class D:
    @property
    def doc(self):
      return f"I love FishC,..from class{self.__class__.__name__}"

d = D()
print(d.doc)

sfqxx 发表于 2023-2-6 17:12:44

ouyunfu 发表于 2023-2-6 16:54
The code you posted will result in an AttributeError, because the __doc__ property of the D class is ...

我去,6

歌者文明清理员 发表于 2023-2-6 18:10:08

ouyunfu 发表于 2023-2-6 16:54
The code you posted will result in an AttributeError, because the __doc__ property of the D class is ...

这是故意说英文?
百度百度开始翻译
页: [1]
查看完整版本: 想要输出I love FishC,..from class{cls.__name__}确输出了<bound method ? of