覆盖属性的方法

时间:2019-03-03 20:02:03

标签: python

我有一个类,该类具有作为另一个类的对象的属性。第三类继承自第一类,在那里,我想覆盖属性的方法...

class Car:
    def __init__(self, door):
        self.door = door

class Door:
    def __init__(self, color):
        self.color = color
    def change_color(self):
        pass

class CarConstruct(Car):
    def __init__(self):
        super(CarConstruct, self).__init__(Door('red'))
        # Here, I want to override self.door.change_color method

在这种情况下重写的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

此技术称为"monkey patching"。通常应避免使用它,因为这会使代码很难理解和推理。除非您有很好的理由,否则避免使用它。造成这种情况的好原因之一可能是mock a method in unit tests

如果您仍然想猴子修补一个对象self.door-check out this answer上的一种方法。