1

我是一个完整的 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

谁能解释一下区别在哪里?

4

2 回答 2

10

除非您需要动态设置属性并绕过描述符.__setattr__()挂钩,否则不要将属性直接分配给.__dict__.

即使类定义了一个属性来节省内存,也不是所有的实例都有一个属性。.__dict__.__slots__

如果您确实需要动态设置属性但不需要绕过描述符或.__setattr__()钩子,则可以正常使用该setattr()函数

于 2013-08-05T18:17:14.167 回答
2

Python 文档

类类型(新式类)和类对象(旧式/经典类)通常由类定义创建(参见类定义部分)。一个类有一个由字典对象实现的命名空间。类属性引用被翻译成这个字典中的查找,例如,C.x被翻译成C.__dict__["x"] (尽管特别是对于新式类,有许多钩子允许其他定位属性的方法)。

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

于 2013-08-05T18:23:52.983 回答