带有抽象类的Python策略模式:error AttributeError:';超级';对象没有属性
我试图使用抽象类在Python中编写一个策略模式。我希望使用在abstrect类中编写的一个具体方法(带有抽象类的Python策略模式:error AttributeError:';超级';对象没有属性,python,runtime-error,abstract-class,strategy-pattern,Python,Runtime Error,Abstract Class,Strategy Pattern,我试图使用抽象类在Python中编写一个策略模式。我希望使用在abstrect类中编写的一个具体方法(\u assembly\u band)来分解所有具体策略的过程 from abc import ABC, abstractmethod class TestSpectralStrategy(ABC): def __init__(self): pass def __assembly_band(self, par: int): return i
\u assembly\u band
)来分解所有具体策略的过程
from abc import ABC, abstractmethod
class TestSpectralStrategy(ABC):
def __init__(self):
pass
def __assembly_band(self, par: int):
return int * 10
@abstractmethod
def algorithm(self, size: int):
pass
class TestConcreteSpectralStrategy(TestSpectralStrategy):
def __init__(self):
super().__init__()
def algorithm(self, size: int):
return super().__assembly_band(size)
当我运行代码时:
if __name__ == '__main__':
test= TestConcreteSpectralStrategy()
test.algorithm(10)
我收到了这个消息
AttributeError: 'super' object has no attribute '_TestConcreteSpectralStrategy__assembly_band'
\uu name\u mangled
引导双下划线属性的目的是通过减少子类中属性的可访问性,防止它们与子类中的属性冲突。在这种情况下,您可能只需要\u assembly\u band
。参见,例如,完全同意@jonrsharpe。在函数“\uuu assembly\u band”中,您正在执行int*10-int是一种类型,您不能将其与10相乘。我猜你是在尝试做PAR* 10。