带有抽象类的Python策略模式:error AttributeError:';超级';对象没有属性

带有抽象类的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

我试图使用抽象类在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 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。