为什么会这样的结构
class A:
def __init__(self, a):
self.a = a
def p(self, b=self.a):
print b
发出错误NameError: name 'self' is not defined
?
答案 0 :(得分:136)
默认参数值在函数define-time中计算,但self
是仅在函数调用时可用的参数。因此,参数列表中的参数不能互相引用。
这是将参数默认为None
并在代码中为其添加测试的常见模式:
def p(self, b=None):
if b is None:
b = self.a
print b
答案 1 :(得分:16)
对于您还希望选择将“b”设置为“无”的情况:
def p(self, **kwargs):
b = kwargs.get('b', self.a)
print b
答案 2 :(得分:6)
如果您是通过谷歌到达此处,请务必检查您是否已将self作为类功能的第一个参数。特别是如果您尝试在函数内引用该对象的值。
tsc --lib es6 --types node -p .
> NameError:name' self'未定义
def foo():
print(self.bar)
>"恭喜你摆脱了NameError!"