Python学习

2021-04-05  本文已影响0人  逛逛_堆栈

第十二天

上次我们说了面向对象的三大特征,即封装、继承、多态,今天我们来说一说Python中的抽象类和接口。

抽象类

与Java一样,python也有抽象类的概念,但是与Java不同的是在python中抽象类需要借助模块实现,抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化。
注意:抽象类的本质还是类,指的是一组类的相似性,包括数据属性和函数属性。

import abc #利用abc模块实现抽象类
class Animal(metaclass=abc.ABCMeta):
    def run(self): #普通方法
        print('动物可以跑')
    @abc.abstractmethod  #定义抽象方法,无需实现功能
    def eat(self):
        pass
if __name__ == '__main__':
    animal = Animal()
#Can't instantiate abstract class Animal with abstract methods eat

通过上述代码,我们可以简单总结如下:
1、Python使用抽象类需要借助abc模块;
2、抽象类中可以有抽象方法,也可以没有抽象方法,但是只要有抽象方法,那么这个类一定是抽象类;
3、存在抽象方法的抽象类不可以创建实例,只可以被继承,子类必须重写抽象类的抽象方法,同时子类也可以有自己的方法;
4、类是从现实对象抽象而来的,那么抽象类就是基于类抽象而来的;

import abc #利用abc模块实现抽象类
class Animal(metaclass=abc.ABCMeta):
    def run(self): #普通方法
        print('动物可以跑')
    @abc.abstractmethod  #定义抽象方法,无需实现功能
    def eat(self):
        pass
class Dog(Animal):
    def eat(self): #重写父类的抽象eat方法
        print('狗狗在吃饭')
    def hao(self):
        print('狗狗可以嚎叫')
if __name__ == '__main__':
   dog = Dog()
   dog.run()
   dog.eat()
   dog.hao()

接口

其实在python中,并没有接口的概念,不像Java中的interface,因为在其他面向对象的语言中,是单继承,接口的出现是为了弥补继承的不足,而在python中,是多继承,也就没有所谓的接口了。
刚我们说了抽象类,抽象类可以说是类和接口的混合体,既可以有常规方法,也可以存在约束子类的方法-抽象方法。那么我们就可以说接口是对子类完全约束,接口中存在什么方法,那么继承类中就必须重写什么方法,接口就是一个规范,不存在其他的代码。
注意:python中无接口类型,定义接口只是人为规定,在编程过程自我约束!!!

import abc #利用abc模块实现抽象类
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod  # 定义抽象方法,无需实现功能
    def run(self):
        pass
    @abc.abstractmethod  #定义抽象方法,无需实现功能
    def eat(self):
        pass
class Pets():
    def xi(self):
        print('宠物在洗澡')
class Dog(Animal,Pets):
    def eat(self):
        print('狗狗在吃饭')
    def run(self):
        print('狗狗在跑路')
    def hao(self):
        print('狗狗可以嚎叫')
if __name__ == '__main__':
    dog = Dog()
    dog.run()
    dog.eat()
    dog.xi()
    dog.hao()

这里我们其实可以将Animal称为接口,定义的方法均是让继承的子类重写的,提供了一种规范。

3、总结

今天的内容比较简单,更多的需要理解。下次我们来说说py文件如何打包成可执行exe文件。

上一篇下一篇

猜你喜欢

热点阅读