美文网首页
Python学习

Python学习

作者: 逛逛_堆栈 | 来源:发表于2021-04-05 17:34 被阅读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文件。

    相关文章

      网友评论

          本文标题:Python学习

          本文链接:https://www.haomeiwen.com/subject/xxrlkltx.html