首页 文章

NameError:未定义名称'self'

提问于
浏览
123

为何如此结构

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

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

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

3 回答

  • 132

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

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

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

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

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

    如果您是通过谷歌到达此处,请务必检查您是否已将self作为类功能的第一个参数 . 特别是如果您尝试在函数内引用该对象的值 .

    def foo():
        print(self.bar)
    

    NameError:未定义名称“self”

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

    “恭喜你摆脱了NameError!”

相关问题