抽象函数的定义方式
导包
from abs import ABCMeta,abstractmethod
声明抽象类
class Area(object):
@abstractmethod
def area(self):
pass
在抽象类中,不用写构造函数,抽象类不能进行实例化
继承抽象类的子类
必须将抽象类中的函数进行重写
(不重写就会报错)
补充语法特性
python3中在写类的时候已经不需要继承object这个类了,这个中写好了多个函数,最常用的就是各个自定义类的比较函数,有了这些各个类中的比较函数是非常方便的,可以进行同类型的比较
但是python3中确实没有现成的继承同一个父类的子类进行比较的方法,我们只能
手写比较函数
比较函数导包
from functools import total_ordering
进行比较
@total_ordering
class Area(object):
@abstractmethod # 抽象接口装饰器
# 抽象类的定义必须使用这个函数接口
def area(self):
pass
def __eq__(self, other):
return self.area() == other.area()
def __lt__(self, other):
return self.area() < other.area()
class Circle(Area):
def __init__(self,a):
self.r=a
def area(self):
return 3.14 * ( self.r **2)
class Square(Area):
def __init__(self,a,b):
self.length=a
self.width=b
def area(self):
return self.length * self.width
特别要说的是:我们只需要写成两个函数就可以了,其他的比较大小的函数都是可以通过这两种进行组合出来的,并且是不需要我们动手进行组合的,编译器会自动帮我们实现,我们只使用就行了
如果我们只是继承了,但是在父类中没有手写比较函数,就会发生报错