在 Python 2.7 中,考虑我有以下代码:
class Base(object):
# Variant 1
def __init__(self, records=[]):
self._records = records
# Variant 2
# def __init__(self, records=[]):
# self._records = []
# if records:
# self._records = records
def append(self, value):
self._records.append(value)
class ChildA(Base):
pass
class ChildB(Base):
pass
a = ChildA()
b = ChildB()
a.append(100)
b.append(200)
print a._records
print b._records
如果我使用变体 1 来初始化我的基类,self._records 的行为就像一个类变量。使用变体 1 执行代码来初始化我的基类,我得到输出:
[100, 200]
[100, 200]
使用变体 2 来初始化我的基类,self._records 的行为就像一个实例变量(如预期的那样)。使用变体 2 执行代码来初始化我的基类,我得到输出:
[100]
[200]
这两种变体有什么区别?为什么变体 1 的工作方式与变体 2 不同?非常感谢你的帮助!