【发布时间】:2016-06-30 07:19:39
【问题描述】:
在函数fiz 中分配num1 = self.var1 时,Python 表示未解析的引用。这是为什么呢?
class Foo:
def __init__(self):
self.var1 = "xyz"
def fiz(self, num1=self.var1):
return
【问题讨论】:
-
默认值不能引用其他参数,包括
self,因为它们“不在同一范围内”。事实上,这些值是在方法运行之前解析的。这也是为什么def f(my_list = [])not 每次调用都会创建一个新列表的原因。解决此问题的一种方法是使用def fiz(self, num1 = None): if num1 is None: num1 = self.var1..如果“无”和“未指定”之间存在差异, kwargs 可以使用。 -
self不在类定义范围内 - 在定义类之前你不能拥有实例!只需使用None作为默认值,然后在方法中设置num1 = self.var1 if num1 is None else num1。