为什么会这样的结构

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

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

给出错误 NameError:name'self'未定义

有帮助吗?

解决方案

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

这是将参数默认为 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!”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top