在 python 中使用抽象基类实现工厂模式 - 抽象类不可调用

Implementing factory pattern with abstract base class in python - Abstract class is not callable

提问人:opnightfall1771 提问时间:12/30/2022 更新时间:12/30/2022 访问量:299

问:

我正在尝试实现一种工厂模式,通过该模式,我可以根据输入检索实例化各种类似的类。如果我有这样的代码:

from abc import ABC, abstractmethod


class AbstractTranscoder(ABC):

    @abstractmethod
    def transcode():
        raise NotImplementedError


class Transcoder1(AbstractTranscoder):

    def transcode():
        ...


class TranscoderFactory:

    TRANSCODERS = {'transcoder1': Transcoder1}

    def get_transcoder(name: str) -> AbstractTranscoder:
        return TRANSCODERS[name]

我的目标是能够使用工厂模式来检索类,如下所示:

transcoder_class = TranscoderFactory().get_transcoder('transcoder1')
transcoder_object = transcoder_class()

我认为这会起作用,但问题是因为我使用的是类型注释,IDE对我大喊大叫。有没有一种更好的方法来实现这一点,使IDE认为我不是在尝试实例化一个抽象类,而是在实例化它的具体子类之一?'AbstractTranscoder object is not callable'

谢谢。

Python 抽象类 工厂

评论

1赞 Mechanic Pig 12/30/2022
您返回的是一个类型,而不是一个实例。尝试用 进行注释。-> typing.Type[AbstractTranscoder]

答: 暂无答案