如何在继承自Abstract Base Class的类中定义方法

时间:2018-11-05 19:00:09

标签: python

我有两个带有两个方法的抽象类: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):

2 个答案:

答案 0 :(得分:0)

您只需要创建一个从抽象类继承并覆盖抽象方法的类,就像编写常规方法一样即可。

class A(ABC):
    @abstractmethod
    def f(self):
        pass

class B(A):
    def f(self):
        print ('hello')

如果您想覆盖它但不执行任何操作:

class B(A):
    def f(self):
        pass

答案 1 :(得分:0)

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

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

    @abstractmethod
    def getPerimeter(self):
        pass

然后,具体的类IRectangleIParallelogram将适当地实现getAreagetPerimeter

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

    def getPerimeter(self):
        ...

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

    def getPerimeter(self):
        ...