【发布时间】:2010-12-20 15:39:20
【问题描述】:
为什么会有这样的结构
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
给出错误NameError: name 'self' is not defined?
【问题讨论】:
为什么会有这样的结构
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
给出错误NameError: name 'self' is not defined?
【问题讨论】:
默认参数值在函数定义时进行评估,但self 是仅在函数调用时可用的参数。因此,参数列表中的参数不能相互引用。
将参数默认为None 并在代码中添加测试是一种常见模式:
def p(self, b=None):
if b is None:
b = self.a
print b
【讨论】:
None,它会被self.a覆盖,这是出乎意料和令人惊讶的。
如果您还希望有将“b”设置为无的选项:
def p(self, **kwargs):
b = kwargs.get('b', self.a)
print b
【讨论】:
如果您是通过 google 到达这里的,请确保检查您是否已将 self 作为类函数的第一个参数。特别是如果您尝试在类函数中引用该对象实例的值。
def foo():
print(self.bar)
>NameError: name 'self' 未定义
def foo(self):
print(self.bar)
【讨论】: