>>> 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__`
Run Code Online (Sandbox Code Playgroud)
实例没有属性的原因是什么 __name__?
也许是__name__instance-myname的 确定myname.
你介意告诉我更合乎逻辑的,而不是不合理的语法规则吗?
Ray*_*ger 20
您正在看到类和实例的实现工件.该__name__属性不存储在类字典中; 因此,从直接实例查找中看不到它.
看一下vars(Foo)只看到它__module__并且__doc__在类字典中并且对实例可见.
对于访问类名称的实例,它必须向上运行Foo().__class__.__name__.另请注意,类具有其他属性,例如__bases__不在类字典中的属性,同样也无法从实例直接访问.