在函数num1 = self.var1
中分配fiz
时,Python表示未解析的引用。那是为什么?
class Foo:
def __init__(self):
self.var1 = "xyz"
def fiz(self, num1=self.var1):
return
答案 0 :(得分:2)
方法(和函数)默认参数值在定义方法时解析 。当这些值可变时,这会导致常见的Python问题:"Least Astonishment" and the Mutable Default Argument
在您的情况下,定义方法时没有self
可用(如果范围中有这样的名称,因为您尚未实际定义类Foo
,它不会是Foo
实例!)您不能在定义中按名称引用类;引用Foo
也会导致NameError
:Can I use a class attribute as a default value for an instance method?
相反,常见的方法是使用None
作为占位符,然后在方法体内分配默认值:
def fiz(self, num1=None):
if num1 is None:
num1 = self.val1
...