1
我对python实例变量初始化的下面情况感到困惑,如果我没有在构造函数中为attr指定值,那么多个实例(i1和i2)会被分配相同的“attr”对象。如果我在构造函数中明确指定值,可能会得到不同的对象python实例变量初始化
示例代码:
class MyClass:
def __init__(self, x=1, attr=[]):
print id(attr)
self.attr = attr
self.x = x
if __name__ == '__main__':
i1 = MyClass()
i2 = MyClass()
i3 = MyClass(attr=[1,2])
i4 = MyClass(attr=[1,2])
print "i1:", vars(i1), id(i1.attr)
print "i2:", vars(i2), id(i2.attr)
print "i3:", vars(i3), id(i3.attr)
print "i4:", vars(i4), id(i4.attr)
输出:
38648928
38648928
38664672
38688648
i1: {'x': 1, 'attr': []} 38648928
i2: {'x': 1, 'attr': []} 38648928
i3: {'x': 1, 'attr': [1, 2]} 38664672
i4: {'x': 1, 'attr': [1, 2]} 38688648
为什么i1和i2具有相同 'ATTR' 对象?
对于记录,尽管这是重复的,但这是一个写得很好的问题。很明显,有代码,显示示例输出,演示了你自己想出的关键区别,等等。 – DSM
应该像Python常见问题一样,链接到SO问题。 – Shashank
谢谢大家的帮助,现在我在阅读完现有文章后明白了,但这对我来说是一个惊喜,Python应该是“最小的惊讶”:) – user2948769