num1 = self.var1在 function 中赋值时fiz,Python 说未解析的引用。这是为什么?
class Foo:
def __init__(self):
self.var1 = "xyz"
def fiz(self, num1=self.var1):
return
Run Code Online (Sandbox Code Playgroud)
方法(和函数)的默认参数值在定义方法时解析。当这些值是可变的时,这会导致一个常见的 Python 陷阱:“Least Astonishment”和可变默认参数
在您的情况下,定义方法时没有self可用的(如果范围内有这样的名称,因为您实际上还没有完成类的定义Foo,那么它就不是一个Foo实例!)您不能引用通过定义内的名称到类;引用Foo也会导致NameError:我可以使用类属性作为实例方法的默认值吗?
相反,常见的方法是用作None占位符,然后在方法体内分配默认值:
def fiz(self, num1=None):
if num1 is None:
num1 = self.val1
...
Run Code Online (Sandbox Code Playgroud)