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
なんで?
これは正しいアプローチですか?