关于python:如何在类定义时访问类体中的内置类属性?

How to access built-in class attributes in class body at class definition time?

一旦构建了一个类(即定义的,而不是实例化的),我就可以访问它的dunder属性。

1
2
3
4
>>> class Foo:
...    'This is a class.'
>>> Foo.__doc__
'This is a class.'

在定义类时,有没有任何方法可以访问__doc__

1
2
3
class Foo:
    'This is a class.'
    a = Foo.__doc__  # does not work because Foo is not defined yet

或者不能这样做,因为__doc__只由类体执行后的元类分配?那它有别名吗?其他邓德属性/方法如何?


不能将docstring作为类的属性访问(因为类对象尚不存在),但可以直接获取它,如局部变量:

1
2
3
class Foo:
    'This is a class.'
    a = __doc__

这设置了预期的EDOCX1的值(0):

1
2
>>> Foo.a
'This is a class.'

但是,我在官方文档中还没有找到关于这种行为的任何信息。目前还不清楚是否能够像这样访问EDOCX1[1]是一个官方功能,还是仅仅是一个实现细节。如果您希望绝对确保您的代码不依赖于可能的实现细节,那么可以像这样手动分配给__doc__

1
2
class Foo:
    a = __doc__ = 'This is a class.'

它有点难看,但肯定能用。