NameError:name'self'没有被定义

为什么这么结构

class A: def __init__(self, a): self.a = a def p(self, b=self.a): print b 

给出一个错误NameError: name 'self' is not defined

默认的参数值是在函数define-time处计算的,但self是只在函数调用时才可用的参数。 因此参数列表中的参数不能相互引用。

将参数默认为None并在代码中添加testing是一种常见模式:

 def p(self, b=None): if b is None: b = self.a print b 

对于您也希望将“b”设置为None的情况:

 def p(self, **kwargs): b = kwargs.get('b', self.a) print b 

如果你是通过谷歌来到这里的,请确保你已经把自己作为第一个参数给类的function。 特别是如果您尝试在函数内引用该对象的值。

 def foo(): print(self.bar) 

> NameError:name'self'没有被定义

 def foo(self): print(self.bar) 

>“恭喜你摆脱了NameError!