内置对象的属性分配[重复项]

||                                                                                                                   这个问题已经在这里有了答案:                                                      
已邀请:
Python将属性存储在字典中。您可以将属性添加到
MyClass
,看到它具有
__dict__
>>> class MyClass(object):
>>>   pass
>>> dir(MyClass)
[\'__class__\', \'__delattr__\', \'__dict__\', \'__doc__\', \'__format__\', \'__getattribute__\', \'__hash__\', \'__init__\', \'__module__\', \'__new__\', \'__reduce__\', \'__reduce_ex__\', \'__repr__\', \'__setattr__\', \'__sizeof__\', \'__str__\', \'__subclasshook__\', \'__weakref__\']
重要的区别是
object
没有
__dict__
属性。
>>> dir(object)
[\'__class__\', \'__delattr__\', \'__doc__\', \'__format__\', \'__getattribute__\', \'__hash__\', \'__init__\', \'__new__\', \'__reduce__\', \'__reduce_ex__\', \'__repr__\', \'__setattr__\', \'__sizeof__\', \'__str__\', \'__subclasshook__\']
更详细的解释: 无法设置对象类的属性 为什么不能在python中向对象添加属性?     
至于其背后的理由,BDFL自己的话是:   禁止这样做是为了防止意外的致命变化   内置类型(对您从未使用过的部分代码具有致命影响   的)。另外,这样做是为了防止更改影响到不同   由于内置类型,驻留在地址空间中的解释器   (与用户定义的类不同)在所有此类对象之间共享   口译员。     
>>> type(object)
type \'type\'
>>> type(MyClass)
type \'classobj\'
这里的重要区别是“ 0”是用户定义的类对象。您可以在其中修改课程的地方。
object()
__builtin__
类对象。 当您继承作为基类以及
__builtin__
的对象时,您只能修改定义的新
MyClass
。     
对于用户定义的类,在对象上设置属性实际上是在修改属性字典,因此您可以随时添加新条目。 (对象的
__dict__
) 内置类型的属性以不同的方式实现,而不是作为通用字典,而直接作为基础实现的内存布局。因为字典不存在,并且无法在运行时更改类,所以无法将新的属性值添加到内置对象中。 请参见: http://webcache.googleusercontent.com/search?q=cache:z4to2IGbKDUJ:www.velocityreviews.com/forums/t593269-cant-set-attributes-of-built-in-extension-type.html+setattr+built+ in + class&cd = 3&hl = zh-CN&ct = clnk&gl = us&client = firefox-a&source = www.google.com http://mail.python.org/pipermail/python-dev/2008-February/077180.html http://mail.python.org/pipermail/python-list/2010-April/1240731.html     

要回复问题请先登录注册