Python _u_init__;()错误行为?
我的代码吼叫遇到了一个奇怪的问题。我无法理解,为什么Python _u_init__;()错误行为?,python,Python,我的代码吼叫遇到了一个奇怪的问题。我无法理解,为什么myClass的simplefied属性从上一轮中保持为“prepluted” 代码: 输出(为了更好地理解,我对行进行了编号) 第1行和第2行非常明显,这里没有魔力。我不明白为什么在第3行我收到了这样一个简单的\u字段值。正如我在代码中所看到的,我创建的类实例没有任何参数-m=myClass() 谢谢你的建议 Ydef打印带额外(lst=[]): 第一项附加(“额外”) 打印(lst) 用_extra([“apple”])#[“apple”,
myClass
的simplefied
属性从上一轮中保持为“prepluted”
代码:
输出(为了更好地理解,我对行进行了编号)
第1行和第2行非常明显,这里没有魔力。我不明白为什么在第3行我收到了这样一个简单的\u字段
值。正如我在代码中所看到的,我创建的类实例没有任何参数-m=myClass()
谢谢你的建议
Ydef打印带额外(lst=[]):
第一项附加(“额外”)
打印(lst)
用_extra([“apple”])#[“apple”,“extra”]打印
用_extra()打印_#['extra']
使用_extra()打印(#['extra','extra']
Python中函数的默认参数在定义函数时计算一次
列表是可变的,.append
将更改它所操作的实例
因此,print\u with_extra
不创建新的空列表,而是重用一次初始化为空列表的单个默认值,并保留默认调用结果中的所有附加元素
同样的情况也发生在构造函数中。def print_with_extra(lst=[]):
第一项附加(“额外”)
打印(lst)
用_extra([“apple”])#[“apple”,“extra”]打印
用_extra()打印_#['extra']
使用_extra()打印(#['extra','extra']
Python中函数的默认参数在定义函数时计算一次
列表是可变的,.append
将更改它所操作的实例
因此,print\u with_extra
不创建新的空列表,而是重用一次初始化为空列表的单个默认值,并保留默认调用结果中的所有附加元素
同样的情况也发生在构造函数中。您正在使用可变类型(列表)作为标准值-它在定义函数时创建一次,并且在每次调用时都保持相同的实例。将其更改为
None
,并在函数体中将其定义为[]
,如果simple_字段为None
您正在使用可变类型(列表)作为标准值-它在定义函数时创建一次,并且在每次调用时保持相同的实例。如果simple_字段为None,则将其更改为None
,并在函数体中将其定义为[]
class myClass:
simpleField = []
name = ''
def __init__(self,simple_field=[]):
self.simpleField = simple_field
print('In __init__ %s ' % str(simple_field))
def __str__(self):
return self.name
def __repr__(self):
return self.name+' '.join(str(self.simpleField))
def fill(name='default'):
m = myClass()
m.name = name
for i in range(0,5):
m.simpleField.append(i)
return m
if __name__ == '__main__':
for i in range(0,2):
m = fill('round '+str(i))
print(m.__repr__())
1. In __init__ []
2. round 0[ 0 , 1 , 2 , 3 , 4 ]
3. In __init__ [0, 1, 2, 3, 4]
4. round 1[ 0 , 1 , 2 , 3 , 4 , 0 , 1 , 2 , 3 , 4 ]