我有如下定义的python3类函数:
class class1:
def funcOne(self, reqvar1, reqVar2, optVar1=default1, optVar2=default2, optVar3="server.domain", optVar4="defaultUser", optVar5="<default_Flags>"):
它在主程序中被调用(我想这样称呼它):
argsIn=argparser.parse_args()
classInst=class1()
classInst.funcOne(5, 12, argsIn.inVal1, argsIn.inVal2, argsIn.inVal3, argsIn.inVal4, argsIn.inVal5)
运行时,在命令行上args.inVal [1-5]是可选的。如果没有提供它们,我希望class函数使用默认值,如果提供了它们,则将使用提供的值。
当前,如果未在命令行上提供它们,则inVal [1-5]作为“ None”传递,它将覆盖实际的默认值。
class函数是单独维护的,它们管理默认值。将它们放入我的脚本中(例如在argparser选项中)是不合适的。
有没有一种方法可以轻松地解决这种情况,而无需采取以下措施:
if args.inVal1 and not args.inVal2...
if not args.inVal1 and args.inVal2 and not args.inVal3...
随着组合数量的增加。
似乎应该很简单,但是我在这里没有连接任何东西。
谢谢您的帮助。
答案 0 :(得分:1)
如果创建包含可选变量名称的字典,则可以将该字典传递给函数调用。我只注释了用于测试的argparser。
class class1:
def funcOne(self, reqvar1, reqVar2, optVar1='default1', optVar2='default2', optVar3="server.domain", optVar4="defaultUser", optVar5="<default_Flags>"):
print(optVar1)
print(optVar2)
print(optVar3)
print(optVar4)
print(optVar5)
#argsIn=argparser.parse_args()
optionalArgs = {'optVar1': 'TestingVar1', #args.inVal1,
'optVar2': None, #args.inVal2,
'optVar3': 'TestingVar3', #args.inVal3,
'optVar4': None, #args.inVal4,
'optVar5': None} #args.inVal5}
optionalArgsClean = {k:v for k, v in optionalArgs.items() if v is not None}
classInst=class1()
classInst.funcOne(5, 12, **optionalArgsClean)
运行上面的代码会产生:
TestingVar1
default2
TestingVar3
defaultUser
<default_Flags>