Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将self.var(实例属性)作为默认方法参数传递_Python_Class - Fatal编程技术网

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