1

可能重复:
Python:类和实例属性之间的区别

今天在工作中,我用 pdb 花了大约三个小时试图找出为什么对象上的字典没有保存正确的值。

这是正在发生的事情的一个很好的模板:

class A:
    prop = {}
    def __init__(self, test):
        temp = self.method(test)

        for i in temp.keys():
            self.prop[i] = temp[i]

    def method(self, test):
        return ({ 'x': test, 'y': test })

a = A(3)
b = A(4)

print a.prop
print b.prop

将返回

{'y': 4, 'x': 4}
{'y': 4, 'x': 4}

我将问题归咎于第二行。我检查了a.prop和b.prop的内存位置,它们是相同的。

因为它是在类中实例化的,在初始化器/构造器之外,它为每个属性分配新空间,但为 prop 分配新空间,并在其中存储相同的内存位置。因此,a 和 b 上的所有其他属性都是正确的(不同的),除了那些被定义为对象的属性。

这是预期的行为吗?我知道这就是它在说 C++ 之类的东西时的工作方式(因为在那时,它们有点静态,对吧?)。

有人可以向我解释为什么 python 会这样对待它吗?当您可以将其指定为静态时,是否有特定的应用程序?

4

0 回答 0