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

2024-10-04 07:27:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在调用子类之前初始化一个超类。下面是我想做的一个例子:

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) 

Tags: csvselfparsersourceiffactorydeftype
1条回答
网友
1楼 · 发布于 2024-10-04 07:27:23

您可以使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

你问得明白吗

相关问题 更多 >