Mir*_*ini 5 python attributes class instance
假设你有这样的东西:
class intlist:
def __init__(self,l = []):
self.l = l
def add(self,a):
self.l.append(a)
def appender(a):
obj = intlist()
obj.add(a)
print obj.l
if __name__ == "__main__":
for i in range(5):
appender(i)
Run Code Online (Sandbox Code Playgroud)
函数创建一个intlist实例,并在该新实例上调用该方法附加在实例属性l上.
为什么这段代码的输出是:
[0]
[0,1]
[0,1,2]
[0,1,2,3]
[0,1,2,3,4]
?如果我切换
obj = intlist()
Run Code Online (Sandbox Code Playgroud)
同
obj = intlist(l=[])
Run Code Online (Sandbox Code Playgroud)
我得到了所需的输出
[0]
[1]
[2]
[3]
[4]
为什么会这样?
谢谢
Dav*_*ver 14
啊,你已经遇到了一个常见的Python陷阱:默认值计算一次,然后重新使用.因此,每次__init__调用时,都会使用相同的列表.
这是Pythonic做你想做的事情的方式:
def __init__(self, l=None):
self.l = [] if l is None else l
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请查看Python文档(特别是该标题后面的三个段落).