如何为两个抽象 类 创建 __add__ 函数

how to create __add__ function for two abstract classes

假设我有一个摘要 class 这样的:

class Something:
 
    def __init__(self, some):
        self.some = some

    @property
    def thing(self):
        thing_obj = self.build()
        assert (thing_obj, some_addable_obj)
        return thing_obj

    @abstractmethod
    def build(self):
        raise NotImplementedError()

我想创造一些东西 __add__ subclasses,即

class OneThing(Something):
    def __init__(self):
        super().__init__(some=None)
    def build(self):
        return some_addable_obj

class TwoThing(Something):
    def __init__(self):
        super().__init__(some=0)
    def build(self):
        return some_addable_obj

现在,在 Something 内,我想定义 __add__ 函数,这样:

def __add__(self, other):
    sm = Something(some=self.some)
    sm.thing = self.thing + other.thing
    return sm

但是,我在上面的更复杂的简化版本中遇到错误:

TypeError: Can't instantiate abstract class Something with abstract methods build

关于如何做到这一点有什么想法吗?

当您将构建函数标记为抽象函数时,您是在说“不要让任何人创建此 class 的具体实例,他们必须子class 并实现构建”。

根据您的具体操作,您可以将 Something 设为不实现构建的具体 class(只需删除装饰器),或者您必须选择具体 class(OneThing 或 TwoThing)从添加到 return。