Python中的接口实现和抽象类

1.接口实现

python中并没有提供专门的接口类型,只能自己定义一个接口类

# python中没有接口,只能自己实现


class Interface:
    def func1(self):
        pass

    def func2(self):
        pass


class Test(Interface):
    def func1(self):
        print('重写了func1')

    def func2(self):
        print('重写了func2')

    def func3(self):
        print('新加入了func3')


if __name__ == '__main__':

    a = Test()
    a.func1()
    a.func2()
    a.func3()

2.抽象类

借助python中的abc模块来实现抽象类

抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化

类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性

抽象类中的抽象方法必须在继承的子类中全部重写

不然会报错:Can't instantiate abstract class Test with abstract methods *函数名

import abc

# 抽象类中既可以有普通函数,也可以有抽象函数,需要使用标记指出


class MyAbstract(metaclass=abc.ABCMeta):

    name = 'dzzhyk'

    def func1(self):
        print('这是普通方法func1')

    @abc.abstractmethod
    def func2(self):
        pass

    @abc.abstractmethod
    def func3(self):
        pass


class Test(MyAbstract):
    def func2(self):
        print('重写了抽象方法func2')

    def func3(self):
        print('重写了抽象方法func3')


if __name__ == '__main__':
    a = Test()
    a.func2()
    a.func3()
    # func1是抽象类中定义的普通方法,也可以在继承的类中正常使用
    a.func1()
    print(a.name)

metaclass:元类,所有的class默认都继承于元类,默认是type

3.抽象类和接口

抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如name)和函数属性(如func1、func2),而接口只强调函数属性的相似性。

扫描二维码关注公众号,回复: 5765274 查看本文章

抽象类是一个介于类和接口之间的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计

4.经典类和新式类

python2中才区分经典类和新式类,python3中统一都是新式类

python中的类可以继承多个类,搜寻类的方法主要有深度优先广度优先两种

经典类和新式类的区别主要在于:

  • 经典类:多继承的条件下,会使用深度优先进行查找
  • 新式类:多继承的条件下,会使用广度优先进行查找

如果一个类继承了object,这个类就是新式类

class MyClass(object):
    pass

参考:

抽象类:
https://blog.csdn.net/DeepOscar/article/details/80802984

metaclass:

https://www.cnblogs.com/xybaby/p/7927407.html

https://stackoverflow.com/questions/100003/what-are-metaclasses-in-python

python中abc模块:

https://www.cnblogs.com/wancy86/p/6269553.html?utm_source=itdadao&utm_medium=referral

python接口:

https://www.cnblogs.com/hester/p/8304932.html

猜你喜欢

转载自blog.csdn.net/weixin_43826242/article/details/87890264