class foo():
def __init__(self,a):
self.A=a
def foo2(self,aa=self.A):
return "la"
@classmethod
def test(cls):
d=foo()
d.foo2()
成员函数 foo2 找不到 self.A 也找不到 A。是否因为 A 没有在类内部全局设置?
最佳答案
关键字参数(例如 aa
)不能采用 self
的默认值。关键字参数在方法定义时计算,而不是在调用时计算。通常,可以通过将 aa
的默认值设置为 None
来实现您所尝试的目的:
class foo():
def __init__(self, a):
self.A = a
def foo2(self, aa=None):
if aa is None:
aa = self.A
return 'la'
另请注意,由于关键字参数默认值是在定义时而不是执行时计算的,因此 foo2
的所有调用都共享其默认参数,即使是从 的不同实例调用也是如此foo
.当新的 Python 程序员使用以下方法时,这常常会让他们感到困惑:
def footoo(a=list()):
a.append(1)
return a
所有对 footoo 的调用都会得到相同列表对象;每次通话都不会产生新的。因此重复调用 footoo
将导致以下结果:
>>> footoo()
[1]
>>> footoo()
[1, 1]
>>> footoo()
[1, 1, 1]
关于python - python中成员函数的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7904318/