我是一个完整的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
任何人都可以解释其中的区别吗?
答案 0 :(得分:10)
除非您需要动态设置属性并绕过descriptors或.__setattr__()
hook,否则请勿将属性直接分配给.__dict__
。
并非所有实例都具有 .__dict__
属性,如果该类定义了.__slots__
attribute以节省内存,则不是。
如果确实需要动态设置属性但不需要绕过描述符或.__setattr__()
挂钩,则通常会使用setattr()
function。
答案 1 :(得分:2)
类类型(新式类)和类对象 (旧式/经典类)通常由类定义创建 (参见类定义)。类具有实现的命名空间 通过字典对象。类属性引用被转换为 此词典中的查找,例如
C.x
已翻译为C.__dict__["x"]
(虽然对于新式课程尤其如此 钩子,允许其他方法定位属性)。
将新元素分配给类的更典型的方法是第二个示例,它允许进行大量自定义(__seattr__
,__getattr__
等。)