【发布时间】:2021-02-18 05:29:21
【问题描述】:
我有一个无法直接编辑其定义的类层次结构。我想包装层次结构中的每个类,以便自定义一些功能。
举一个非常简单的例子,假设我们有一个动物等级:
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def sound(self):
pass
class Cat(Animal):
def sound(self):
return "Meow"
class Dog(Animal):
def sound(self):
return "Woof"
class Cow(Animal):
def sound(self):
return "Moo"
现在,如果我想修改其中一种动物的sound 方法,我可以直接继承类:
class LoudDog(Dog):
def sound(self):
return super().sound().upper()
但理想情况下,我应该能够制作一个包装器,让我可以制作任何 Animal 类的大声版本,如下所示:
LoudDog = Loud(Dog)
LoudCat = Loud(Cat)
LoutCow = Loud(Cow)
实现这一目标的最佳/最 Pythonic 方式是什么?语法不必与上面完全相同。我在想元类在这里可能有用,但我对这些没有太多经验,我也会对其他解决方案感到满意。
【问题讨论】:
-
您可以将其用作混音 -
class LoudDog(Loud, Dog): pass。