我正在尝试在调用子类之前初始化超类。这是我要执行的操作的示例:
class AbstractSourceParser(object):
def __init__(self, filepath):
self.source_type = get_type_from_filepath(filepath)
@staticmethod
def factory(source_type):
source_type = source_type.upper() if source_type else None
if source_type == SourceType.CSV.upper():
return CSVSourceParser()
class CSVSourceParser(AbstractSourceParser):
...
然后我希望能够这样称呼它:
parser = AbstractSourceParser("/tmp/file.csv").factory(self.type)
我认为我在上面写的内容在代码中没有意义,但是基本上我想在“将数据传递给超类之后”检索工厂方法。怎么办?
当前,我正在执行以下操作,我认为这很丑陋(如果不太可能的话)-
>>> _parser = AbstractSourceParser("/tmp/file.csv")
>>> parser = _parser.factory(_parser.source_type)
答案 0 :(得分:0)
您可以将factory()
设置为常规实例方法,并使其起作用:
class AbstractSourceParser(object):
def __init__(self, filepath):
self.source_type = get_type_from_filepath(filepath)
def factory(self, source_type=None):
if source_type is None:
source_type = self.source_type
source_type = source_type.upper() if source_type else None
if source_type == SourceType.CSV.upper():
return CSVSourceParser()
因此,如果要在父构造函数中定义源类型,则可以不带任何参数调用factory()
。但是,您仍然可以根据需要提供其他source_type
。
能满足您的要求吗?