Python - 将添加的基础 class 功能传播到子 classes

Python - Propagating added base class functionalty to subclasses

假设我正在使用具有以下 classes:

的形状绘制框架
 class Shape(ABC):
  movable: False

  @abstractmethod
  def movePoint(pointId, newX, newY): pass

class Rect(Shape):
  aspectLocked: False

  # Implement abstract function
  def movePoint(pointId, newX, newY): pass

class Hexagon(Shape): pass
  # ...

我想在我的代码中使用 RectHexagon 等,但我希望每个都有一个 fill() 方法。但是,fill() 可以在 Shape 级别工作,所以我最终这样做:

def _shapeFill(self):
  pass

class MyRect(Rect):
  def fill(self):
    return _shapeFill(self)

# Same procedure for Hexagon, etc.

我也可以

for shape in [Rect, Hexagon]:
  shape.fill = _shapeFill

但是像 PyCharm 这样的编辑不承认 fill() 是一种 class 方法,我不知道这个解决方案是否可靠。

基本上,我想扩展 Shape 并在 Rect class 中提供该扩展方法,而无需重新定义 Rect。有pythonic解决方案吗?

如果有人能告诉我它的技术名称,加分加分,因为我不知道 Google 是什么术语。谢谢!

您可以将其附加到 ABC:

Shape.fill = _shapefill

如果你想更好地使用 IDE 和代码分析,你可以在 mixin class 中定义你的额外方法,你从自定义形状 classes:

class ShapeMixin:
    def fill(self):
        pass

class MyRect(Rect, ShapeMixin):
    pass

这基本上是您的第一个解决方案,但表达得更清楚一些。