为什么对象类不允许属性?

时间:2012-07-22 15:26:58

标签: python python-2.7

  

可能重复:
  Can set any property of Python object

In [67]: obj = object()    
In [68]: obj.x = 42
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
/home/user/<ipython-input-68-0203a27904ca> in <module>()
----> 1 obj.x = 42

AttributeError: 'object' object has no attribute 'x'    
In [69]: class myc(object):
   ....:     pass
   ....:     
In [70]: my = myc()    
In [71]: my.x = 42

看起来不一致。如何在不允许添加新属性的情况下使我的类与object类似?

1 个答案:

答案 0 :(得分:2)

大多数内置类型不允许自定义属性,因为这些属性与每个实例关联的字典的开销有关。默认情况下,自定义类具有此类字典(可通过__dict__属性访问),但您可以通过添加

来避免其创建
__slots__ = []

到班级定义 - 有关详细信息,请参阅documentation