我有一个类有这样的构造函数:
class MyClass:
def __init__(self, options):
self.options = options
.....
有时我通过传递options
来启动此类的实例,例如:
parser = argparse.ArgumentParser(description='something')
parser.add_argument('-v', '--victor', dest='vic')
options = parser.parse_args()
x = MyClass(options)
这样可以正常工作,但是,有些情况下会没有选项传递,所以对于这些场景,我在MyClass
中创建了一个方法,它将创建这样的默认选项。
class MyClass:
def __init__(self, options):
self.options = options
def create_default_parser(self):
parser = argparse.ArgumentParser(description='something')
parser.add_argument('-v', '--victor', dest='vic', default="winning")
options = parser.parse_args()
self.options = options
问题
当我不想传递任何options
并使用create_default_parser
时,我该如何启动此类的实例?
理想情况下,我会创建另一个不接受任何参数的构造函数,在该构造函数中我会调用create_default_parser
,如下所示:
def __init__(self):
self.create_default_parser()
答案 0 :(得分:2)
您可以使用带有默认值的关键字参数。
class MyClass:
def __init__(self, options=None):
if options is not None:
self.options = options
else:
self.create_default_parser()
然后可以使用
调用它MyClass(options)
或
MyClass() # calls create_default_parser()
答案 1 :(得分:2)
有几种方法可以做到这样的事情。一种方法是让选项具有一个默认值,表示您想要默认值。这看起来像这样:
class MyClass:
def __init__(self, options=None):
if options is None:
options = create_default_parser()
self.options = options
def create_default_parser(self):
parser = argparse.ArgumentParser(description='something')
parser.add_argument('-v', '--victor', dest='vic', default="winning")
options = parser.parse_args()
return options
初始化默认值看起来像
default = MyClass()
另一种方法是使用这样的类方法:
class MyClass:
def __init__(self, options):
self.options = options
@classmethod
def create_default_parser(cls):
parser = argparse.ArgumentParser(description='something')
parser.add_argument('-v', '--victor', dest='vic', default="winning")
options = parser.parse_args()
return cls(options)
,默认设置如下:
default = MyClass.create_default_parser()