为什么python实例没有__name__属性?

时间:2013-01-25 03:24:27

标签: python

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

1 个答案:

答案 0 :(得分:18)

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

查看vars(Foo)以查看只有__module____doc__在类字典中且对实例可见。

对于访问类名称的实例,它必须以Foo().__class__.__name__向上运行。另请注意,类具有其他属性,例如__bases__,这些属性不在类字典中,同样也无法从实例直接访问。