替代多个构造函数
alternate for multiple constructors
我有一个 class 有这样一个构造函数:
class MyClass:
def __init__(self, options):
self.options = options
.....
有时我会通过传递 options
来启动此 class 的实例,例如:
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
时,我应该如何启动此 class 的实例?
理想情况下,我会制作另一个不接受任何参数的构造函数,并在该构造函数中调用 create_default_parser
,如下所示:
def __init__(self):
self.create_default_parser()
您可以使用具有默认值的关键字参数。
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()
您可以通过多种方式完成类似的操作。一种方法是让选项具有默认值,表明您需要默认值。这可能看起来像这样:
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 方法:
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()
我有一个 class 有这样一个构造函数:
class MyClass:
def __init__(self, options):
self.options = options
.....
有时我会通过传递 options
来启动此 class 的实例,例如:
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
时,我应该如何启动此 class 的实例?
理想情况下,我会制作另一个不接受任何参数的构造函数,并在该构造函数中调用 create_default_parser
,如下所示:
def __init__(self):
self.create_default_parser()
您可以使用具有默认值的关键字参数。
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()
您可以通过多种方式完成类似的操作。一种方法是让选项具有默认值,表明您需要默认值。这可能看起来像这样:
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 方法:
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()