我有两个带有两个方法的抽象类: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):
答案 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
然后,具体的类IRectangle
和IParallelogram
将适当地实现getArea
和getPerimeter
。
class IRectangle(Shape):
def getArea(self):
...
def getPerimeter(self):
...
class IParallelogram:
def getArea(self):
...
def getPerimeter(self):
...