23
>>> 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__
也许__name__instance-myname 的 myname.
你介意告诉我更合乎逻辑的,而不是不合理的语法规则吗?

4

1 回答 1

29

您正在看到实现类和实例的工件。该__name__属性不存储在类字典中;因此,它不能从直接的实例查找中看到。

vars(Foo)仅查看并在类字典中查看并且__module____doc__实例可见。

要让实例访问类的名称,它必须向上使用Foo().__class__.__name__. 另请注意,类具有其他属性,例如__bases__不在类字典中的属性,同样不能从实例直接访问。

于 2013-01-25T03:37:35.550 回答