Python复合设计模式-递归错误:超过最大递归深度

Python复合设计模式-递归错误:超过最大递归深度,python,recursion,composite,Python,Recursion,Composite,因此,我仔细阅读了一些设计模式的书籍,我决定用python编写自己的(这本书是为Java编写的),我偶然发现了这个我无法解决的问题,我在这里遗漏了什么 那么,我为什么要在这里得到递归错误呢 class Component: _components = [] def __init__(self, value): self.value = value def add(self, *components): self._components

因此,我仔细阅读了一些设计模式的书籍,我决定用python编写自己的(这本书是为Java编写的),我偶然发现了这个我无法解决的问题,我在这里遗漏了什么

那么,我为什么要在这里得到递归错误呢

class Component:

    _components = []

    def __init__(self, value):
        self.value = value

    def add(self, *components):
        self._components.extend(components)

    def remove(self, *components):
        self._components = list(set(self._components).difference(set(components)))

    def get_components(self):
        return self._components

    def __repr__(self):
        return "Component value: {}".format(self.value)


class ComputerComponent(Component):

    def turn_on(self):
        self.on = True
        for component in self.get_components( ):
            component.turn_on( )
        print("{} turned on".format(self.value))



class Computer(ComputerComponent):
    pass

class LCDScreen(ComputerComponent):
    pass

class Mouse(ComputerComponent):
    pass

class Keyboard(ComputerComponent):
    pass

computer = Computer("computer")
lcd_screen = LCDScreen("lcd_screen")
mouse = Mouse("mouse")
keyboard = Keyboard("keyboard")

computer.add(lcd_screen,mouse,keyboard)

computer.turn_on( )

\u组件
应该是实例变量,而不是类变量。实际上,将这些组件添加到计算机会将它们添加到所有其他组件。也就是说,每个组件都是其他组件的组件,这会导致无限循环

class Component:

    def __init__(self, value):
        self.value = value
        self._components = []

    def add(self, *components):
        self._components.extend(components)

    def remove(self, *components):
        self._components = list(set(self._components).difference(set(components)))

    def get_components(self):
        return self._components

    def __repr__(self):
        return "Component value: {}".format(self.value)

\u组件
应该是实例变量,而不是类变量。实际上,将这些组件添加到计算机会将它们添加到所有其他组件。也就是说,每个组件都是其他组件的组件,这会导致无限循环

class Component:

    def __init__(self, value):
        self.value = value
        self._components = []

    def add(self, *components):
        self._components.extend(components)

    def remove(self, *components):
        self._components = list(set(self._components).difference(set(components)))

    def get_components(self):
        return self._components

    def __repr__(self):
        return "Component value: {}".format(self.value)