在调用工厂方法之前实例化超类

时间:2019-02-16 03:34:53

标签: python python-3.x multiple-inheritance

我正在尝试在调用子类之前初始化超类。这是我要执行的操作的示例:

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) 

1 个答案:

答案 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

能满足您的要求吗?