Python Composite Desing Pattern - RecursionError: maximum recursion depth exceeded
Python Composite Desing Pattern - RecursionError: maximum recursion depth exceeded
所以我浏览了一些设计模式书籍,然后我决定在 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( )
_components
应该是实例变量,而不是 class 变量。实际上,将组件添加到计算机会将它们添加到 所有 其他组件。也就是说,每个组件都是其他所有组件的组件,这会导致无限循环。
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)
所以我浏览了一些设计模式书籍,然后我决定在 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( )
_components
应该是实例变量,而不是 class 变量。实际上,将组件添加到计算机会将它们添加到 所有 其他组件。也就是说,每个组件都是其他所有组件的组件,这会导致无限循环。
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)