如何在类定义时访问类主体中的内置类属性?

时间:2018-02-21 16:03:28

标签: python

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

>>> class Foo:
...    'This is a class.'
>>> Foo.__doc__
'This is a class.'

在定义班级时,有什么方法可以访问__doc__ 吗?

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

或者可以这样做,因为{<1}}仅在类主体执行后由元类分配?那么它有别名吗?其他dunder属性/方法怎么样?

1 个答案:

答案 0 :(得分:1)

您无法将docstring作为类的属性访问(因为类对象尚未存在),但您可以直接获取它,就像本地变量一样:

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

这可以设置a的值,如下所示:

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

然而 ,我还没有在官方文档中找到有关此行为的任何信息。目前还不清楚是否能够访问__doc__这样的官方功能或仅仅是实施细节。如果您想确保您的代码不依赖于可能的实施细节,您可以手动分配到__doc__,如下所示:

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

它有点难看,但它确保有效。