171

为什么会有这样的结构

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

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

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

4

3 回答 3

194

默认参数值在函数定义时评估,但self参数仅在函数调用时可用。因此,参数列表中的参数不能相互引用。

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

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

2022 年更新: Python 开发人员现在正在考虑为未来的 Python 版本设置后期绑定参数默认值。

于 2009-11-26T10:50:14.943 回答
20

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

def p(self, **kwargs):
    b = kwargs.get('b', self.a)
    print b
于 2009-11-26T17:28:10.117 回答
15

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

def foo():
    print(self.bar)

>NameError:名称“自我”未定义

def foo(self):
    print(self.bar)
于 2017-08-04T23:18:33.010 回答