首页 > 解决方案 > 如何在继承自抽象基类的类中定义方法

问题描述

我有两个具有两种方法的抽象类:getArea(width, height)getPerimeter(width, height). 这些方法也是抽象的,因此它们可以(或不)在派生类中实现(在我的情况下,它们必须实现)。在 C# 中,我可以编写IRectangle.getArea(){}IParallelogram.getPerimeter(){}简单地进行实现。我怎样才能在 Python 中做到这一点?我认为我必须使用类似的东西,super(IRectangle, self).getArea()但我不知道如何。

from abc import ABC, abstractmethod

class IRectangle(ABC):
  @abstractmethod
  def getArea(width, height):
    pass
  @abstractmethod
  def getPerimeter(width, height):
    pass

class IParallelogram(ABC):
  @abstractmethod
  def getArea(parHeight, parBase):
      pass
  @abstractmethod
  def getPerimeter(parHeight, parBase):
    pass

class Calculate (IParallelogram, IRectangle):

标签: python

解决方案


您的类层次结构是颠倒的。首先,您将定义一个更通用的类,例如Shape作为层次结构的(抽象)根。

class Shape(ABC):
    @abstractmethod
    def getArea(self):
        pass

    @abstractmethod
    def getPerimeter(self):
        pass

然后,具体的类IRectangleIParallelogram适当getArea地实施getPerimeter

class IRectangle(Shape):
    def getArea(self):
        ...

    def getPerimeter(self):
        ...

class IParallelogram:
    def getArea(self):
        ...

    def getPerimeter(self):
        ...

推荐阅读