Python 将self.var(实例属性)作为默认方法参数传递
在函数Python 将self.var(实例属性)作为默认方法参数传递,python,class,Python,Class,在函数fiz中赋值num1=self.var1时,Python表示未解析引用。为什么呢 class Foo: def __init__(self): self.var1 = "xyz" def fiz(self, num1=self.var1): return 方法(和函数)默认参数值在定义方法时解析。当这些值是可变的时,这会导致一个常见的Python问题: 在您的情况下,在定义方法时没有可用的self(如果范围中有这样一个名称,因为您实际上
fiz
中赋值num1=self.var1
时,Python表示未解析引用。为什么呢
class Foo:
def __init__(self):
self.var1 = "xyz"
def fiz(self, num1=self.var1):
return
方法(和函数)默认参数值在定义方法时解析。当这些值是可变的时,这会导致一个常见的Python问题:
在您的情况下,在定义方法时没有可用的self
(如果范围中有这样一个名称,因为您实际上还没有定义完类Foo
,它也不会是Foo
实例!)您也不能在定义中按名称引用类;引用Foo
也会导致名称错误
:
相反,常用的方法是使用None
作为占位符,然后在方法体中指定默认值:
def fiz(self, num1=None):
if num1 is None:
num1 = self.val1
...
默认值不能引用其他参数,包括
self
,因为它们“不在同一范围内”。事实上,这些值是在方法运行之前解析的。这也是为什么def(my_list=[])
不会在每次调用时创建新列表的原因。。一种方法是使用def fiz(self,num1=None):如果num1为None:num1=self.var1..
如果“None”和“not specified”之间存在差异,则可以使用kwargs。self
不在类定义的范围内-在定义完类之前不能有实例!只需使用None
作为默认值,然后在方法中设置num1=self.var1,如果num1不是其他num1
。@BillalBEGUERADJ因为我最初没有找到重复项,所以写了一个答案,然后想到了另一个可以使用的搜索词,并设法找到了一个。现在我不能删除这个答案,因为它被接受了。很公平,祝你有一个愉快的一天+1