子类中的Python文档字符串

子类中的Python文档字符串,python,class,nested,docstring,Python,Class,Nested,Docstring,我正在用Python创建一个类,然后使用setattr()添加一些嵌套类 然而,调用帮助(T)并不包含关于C的信息。构造一个T,然后在其中构造一个C,效果很好 以传统方式进行此操作效果良好: class T2( object ): class C2( object ): __doc__ = 'Inner class doc string' 呼叫帮助(T2)显示有关C2的信息 有人能解释一下这里发生了什么吗?谢谢。帮助操作类和类型,而不是对象。但是,您的T在对象中只有成

我正在用Python创建一个类,然后使用setattr()添加一些嵌套类

然而,调用帮助(T)并不包含关于C的信息。构造一个T,然后在其中构造一个C,效果很好

以传统方式进行此操作效果良好:

class T2( object ): 
    class C2( object ):
        __doc__ = 'Inner class doc string'
呼叫帮助(T2)显示有关C2的信息


有人能解释一下这里发生了什么吗?谢谢。

帮助
操作类和类型,而不是对象。但是,您的
T
在对象中只有成员
C
(当
\uuuuu init\uuuuu
已运行时)。所以
help
无法检测到它


您的
T2
在类本身中也包含
C2
,因此
help
会检测到它并显示正确的信息。

help
对类和类型而不是对象进行操作。但是,您的
T
在对象中只有成员
C
(当
\uuuuu init\uuuuu
已运行时)。所以
help
无法检测到它


您的
T2
在类本身中也包含
C2
,因此
help
会检测到它并显示正确的信息。

您显示的两个代码片段并不相同

这:

将在每个
T
实例上设置
C
属性:

>>> T.C
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'T' has no attribute 'C'
>>> t = T()
>>> t.C
<class '__main__.C'>
将在
T2
本身上添加一个属性:

>>> T2.C2
<class '__main__.C2'>
>>T2.C2

您显示的两个代码片段并不相同

这:

将在每个
T
实例上设置
C
属性:

>>> T.C
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: type object 'T' has no attribute 'C'
>>> t = T()
>>> t.C
<class '__main__.C'>
将在
T2
本身上添加一个属性:

>>> T2.C2
<class '__main__.C2'>
>>T2.C2

第一种方法使
C
成为每个
T
对象的实例属性

第二种方法使
C
成为
T
类的class属性


help(T)
提供有关
T
类的帮助(在本例中,名称
T
所指的对象是类)。它无法知道任何给定的
t
实例的任何信息,即使它对每个实例都是正确的(而且可能不是这样;以后的代码可以执行
my_t=t();del my_t.C
)。

第一种方法导致
C
成为每个
t
对象的实例属性

第二种方法使
C
成为
T
类的class属性

help(T)
提供有关
T
类的帮助(在本例中,名称
T
所指的对象是类)。它无法知道任何给定的
t
实例的任何信息,即使它对每个实例都是正确的(而且可能不是,无论如何;以后的代码可以执行
my_t=t();del my_t.C

>>> T2.C2
<class '__main__.C2'>