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