import argparse
class A:
def __init__(self,val=1):
self.val = val
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--val', default=1)
args = parser.parse_args()
a = A(val=args.val)
我经常发现自己有一个如上所示的结构,其中一个类接受一个具有默认值的可选参数。对于argparse,我需要再次定义这个默认值。如果它改变了,我必须在多个地方改变它。
在类中保留默认值不是一个选项,因为类也可能从其他地方初始化。
我曾考虑将argparse默认值设置为None,并且只有在它不是None时才传递它,而是使用多个变量,这将导致复杂的代码。
我脑海中唯一浮现的另一件事是页面顶部的一个部分,用于设置常量,如";DEFAULT_ val";所以默认值只定义一次,但我想知道是否有更好的解决方案。
import argparse
import inspect
def get_default_args(func):
signature = inspect.signature(func)
return {
k: v.default
for k, v in signature.parameters.items()
if v.default is not inspect.Parameter.empty
}
class A:
def __init__(self,val=1):
self.val = val
if __name__ == '__main__':
default_values = get_default_args(A.__init__)
parser = argparse.ArgumentParser()
parser.add_argument('--val', default=default_values['val'])
args = parser.parse_args()
a = A(val=args.val)
在的另一个问题的答案中找到了解决方案