为什么要这样的结构
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
更新 2022: Python 开发者现在正在考虑在未来的 Python 版本中使用 延迟绑定参数默认值。如果您还希望将'b'选项设置为None的情况:
def p(self, **kwargs):
b = kwargs.get('b', self.a)
print b
如果在方法签名中没有定义self
,也会发生NameError
错误。由于预期和给定的参数不匹配,此错误通常会出现为TypeError
。但是,如果您接受可变数量的参数,则self
将是arg[0]
,而变量self
将未定义。
这里有一个最简示例。
class Obj:
def foo(*args):
print(self.bar)
>NameError: name 'self' is not defined
更正:
class Obj:
def baz(self, *args):
print(self.bar)
[1] 为什么明确的self参数必须保留
self
参数通常会导致一个 TypeError
错误,抱怨参数数量不正确。 - Karl Knechtelfoo(self, *args, **kwargs)
但是self被省略的情况。 - Erich
None
,它会被覆盖为self.a
,这是意料之外和令人惊讶的。 - abelenky