>>> class Foo:
... 'it is a example'
... print 'i am here'
...
i am here
>>> Foo.__name__
'Foo'
>>> Foo().__name__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Foo instance has no attribute '__name__'
>>> Foo.__doc__
'it is a example'
>>> Foo().__doc__
'it is a example'
>>> Foo.__dict__
{'__module__': '__main__', '__doc__': 'it is a example'}
>>> Foo().__dict__
{}
>>> Foo.__module__
'__main__'
>>> Foo().__module__
'__main__'
>>> myname=Foo()
>>> myname.__name__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Foo instance has no attribute `__name__`
实例没有属性__name__
的原因是什么?
也许可以确定instance {myname}的__name__
是myname
你介意告诉我更合乎逻辑的,而不是不合理的语法规则吗?
答案 0 :(得分:18)
您正在看到类和实例实现的工件。 __name__
属性未存储在类字典中;因此,从直接实例查找中无法看到它。
查看vars(Foo)
以查看只有__module__
和__doc__
在类字典中且对实例可见。
对于访问类名称的实例,它必须以Foo().__class__.__name__
向上运行。另请注意,类具有其他属性,例如__bases__
,这些属性不在类字典中,同样也无法从实例直接访问。