NameError:未定义名称"self"

chr*_*iss 133 python nameerror

为何如此结构

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

    def p(self, b=self.a):
        print b
Run Code Online (Sandbox Code Playgroud)

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

int*_*tgr 142

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

这是默认参数的常见模式,None并在代码中为其添加测试:

def p(self, b=None):
    if b is None:
        b = self.a
    print b
Run Code Online (Sandbox Code Playgroud)

  • 虽然我认为上面的内容不是很漂亮(我来自ruby,其中的东西工作得很好),但上面实际上是一种解决方法.python选择在参数列表中使自己不可用仍然很尴尬. (4认同)
  • @shevy:“self”在python中没有特殊含义,它只是_conventionally_为第一个参数选择的名称。您也可以将“self”替换为“me”或“x”。 (3认同)
  • 难道就没有更好的办法了吗?如果我们有一个函数需要十几个应该引用 self 的默认参数,那么我们真的需要十几个 if 语句吗?这实在是太尴尬了。 (2认同)

小智 16

对于您还希望选择将"b"设置为"无"的情况:

def p(self, **kwargs):
    b = kwargs.get('b', self.a)
    print b
Run Code Online (Sandbox Code Playgroud)


Eri*_*ich 6

如果您是通过Google到达这里的,请确保检查是否已将self作为类函数的第一个参数。特别是如果您尝试在函数内引用该对象的值。

def foo():
    print(self.bar)
Run Code Online (Sandbox Code Playgroud)

> NameError:名称“ self”未定义

def foo(self):
    print(self.bar)
Run Code Online (Sandbox Code Playgroud)

>“恭喜您摆脱了NameError!”