python类中的抽象函数,以及继承后子类的比较

抽象函数的定义方式

导包
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

特别要说的是:我们只需要写成两个函数就可以了,其他的比较大小的函数都是可以通过这两种进行组合出来的,并且是不需要我们动手进行组合的,编译器会自动帮我们实现,我们只使用就行了

如果我们只是继承了,但是在父类中没有手写比较函数,就会发生报错python类中的抽象函数,以及继承后子类的比较_第1张图片

你可能感兴趣的:(python,开发语言)