可能重复:
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 会这样对待它吗?当您可以将其指定为静态时,是否有特定的应用程序?