我有类似的东西(我知道这段代码不起作用,但它更接近我想要实现的目标):
class A:
def __init__(self):
self.a = 'a'
def method(self, a=self.a):
print a
myClass = A()
myClass.method('b') # print b
myClass.method() # print a
到目前为止我做了什么,但我不喜欢它,是:
class A:
def __init__(self):
self.a = 'a'
def method(self, a=None):
if a is None:
a = self.a
print a
myClass = A()
myClass.method('b') # print b
myClass.method() # print a
答案 0 :(得分:3)
默认参数在定义时间进行评估。到定义类和方法时self.a
不是。
您的工作代码示例实际上是实现此行为的唯一干净方法。
答案 1 :(得分:2)
默认值是在方法定义时计算的,即解释器执行类主体时,通常只发生一次。将动态值指定为默认值只能在方法体内进行,并且您使用的方法完全没问题。