在Python中为对象属性赋值的正确方法是什么?

时间:2013-08-05 18:12:56

标签: python class

我是一个完整的Python新手所以我的问题可能看起来很愚蠢。我已经看到有两种方法可以在Python中为对象属性赋值:

使用__dict__

class A(object):

    def __init__(self,a,b):
        self.__dict__['a'] = a
        self.__dict__['b'] = b

没有__dict__

class A(object):

    def __init__(self,a,b):
        self.a = a
        self.b = b

任何人都可以解释其中的区别吗?

2 个答案:

答案 0 :(得分:10)

除非您需要动态设置属性并绕过descriptors.__setattr__() hook,否则请勿将属性直接分配给.__dict__

并非所有实例都具有 .__dict__属性,如果该类定义了.__slots__ attribute以节省内存,则不是。

如果确实需要动态设置属性但不需要绕过描述符或.__setattr__()挂钩,则通常会使用setattr() function

答案 1 :(得分:2)

来自Python documentation

  

类类型(新式类)和类对象   (旧式/经典类)通常由类定义创建   (参见类定义)。类具有实现的命名空间   通过字典对象。类属性引用被转换为   此词典中的查找,例如C.x已翻译为C.__dict__["x"]   (虽然对于新式课程尤其如此   钩子,允许其他方法定位属性)。

将新元素分配给类的更典型的方法是第二个示例,它允许进行大量自定义(__seattr____getattr__等。)