如何为两个抽象 类 创建 __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。
假设我有一个摘要 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。