默认类值和argparse

时间:2013-11-05 22:58:40

标签: python argparse

我想编写一个可以从argparse对象或通常方式初始化的类。这是我的尝试:

class MyClass () :
    foo_default = 10

    def __init__ (self, *args, **kwargs) :
        if len(args) > 0 :
            if len(kwargs) == 0 :
                kwargs, = args
            else : raise Exception("MyClass: cannot mix anonymous & named")
        # double defaulting because a missing command line arg results in a
        # present key but None value and the default is ignored
        self.foo = kwargs.get('foo', foo_default) or foo_default

    @staticmethod
    def add_arguments (parser) :
        parser.add_argument('-foo', type=int, help='for MyClass')

我打算像这样使用它:MyClass(foo=42)或者像这样:

import argparse
parser = argparse.ArgumentParser(description='...')
MyClass.add_arguments(parser)
args = parser.parse_args()
mc = MyClass(args.__dict__))

然而,我收到此错误:

NameError: global name 'foo_default' is not defined

为什么?

这是正确的方法吗?

1 个答案:

答案 0 :(得分:3)

foo_defaultMyClass上的属性,因此您需要符合条件:

self.foo = kwargs.get('foo', self.foo_default) or self.foo_default