我有一个类函数,它接受4个参数,所有类成员变量都在实践中。通常一次只修改其中一个参数,其余时间将默认值(类成员变量的当前值)传递给函数/写出,即使它们没有改变。 / p>
我认为最好的方法是将这些类成员变量设为默认值,但我很难获得最佳语法。以下代码生成我想要的行为 - 使用类成员变量作为函数的默认参数。但它很难看:
class test:
def __init__(self, a, b):
self.a = a
self.b = b
def testfunc(self, param = None):
if not param:
param = self.a
print(param)
if __name__ == '__main__':
a1 = test(1, 3)
a1.testfunc()
a2 = test(5, 5)
a2.testfunc()
#(prints 1 and 5 when called)
我想使用以下内容:
def testfunc(self, param = self.a):
print(param)
但这会产生错误:
NameError: name 'self' is not defined
更好的方法是什么?
答案 0 :(得分:3)
你的第一次尝试是pythonic,我唯一要改变的是测试:
def testfunc(self, param = None):
if param is None:
param = self.a
print(param)
测试False
的问题是零和空容器(包括空字符串)都解析为False
。
如果您有大量这些内容,请参阅Understanding kwargs in Python
答案 1 :(得分:0)
如果你的函数有4个参数,并且所有4个参数都是可选的,并且对象本身具有匹配的属性,那么你可以使用关键字参数使这个更简单:
def testfunc(self, **kwargs):
a, b, c, d = [kwargs.get(name, getattr(self, name)
for name in ('a', 'b', 'c', 'd')]
然后,您需要使用关键字参数调用此方法:
obj.testfunc() # all values are defaults
obj.testfunc(a=1) # a=1, all other values are defaults
obj.testfunc(b=2, d=5) # etc.