Python:三态的总结(继承、封装、多态)

继承解析
collections 模块中有一些派生自 ABC 的具体类;当然这些类还可以进一步被派生。此外,collections.abc 子模块中有一些 ABC 可被用于测试一个类或实例是否提供特定的接口,例如它是否可哈希或它是否为映射等。

该模块提供了一个元类 ABCMeta,可以用来定义抽象类,另外还提供一个工具类 ABC,可以用它以继承的方式定义抽象基类。

class abc.ABC
一个使用 ABCMeta 作为元类的工具类。抽象基类可以通过从 ABC 派生来简单地创建,这就避免了在某些情况下会令人混淆的元类用法,例如:

from abc import ABC

class MyABC(ABC):
pass
注意 ABC 的类型仍然是 ABCMeta,因此继承 ABC 仍然需要关注元类使用中的注意事项,比如可能会导致元类冲突的多重继承。当然你也可以直接使用 ABCMeta 作为元类来定义抽象基类,例如:

from abc import ABCMeta

class MyABC(metaclass=ABCMeta):
pass

举例说明

# Python的三态:继承、封装、多态
#面向对象继承:将多个类共有的方法提取到父类,子类只需要继承父类即可


#单继承
class Animal():
    def eat(self):
        '''
        吃
        :return:
        '''
        print('在吃饭')
        pass
    def drink(self):
        '''
        喝
        :return:
        '''
        print('在喝水')
        pass
class Dog(Animal):  #继承了Animal父类
    def ha(self):
        '''
        实现子类独有的属性
        :return:
        '''
        print('小狗在叫')
    pass
class Cat(Animal):    #继承了Animal父类
    def mia(self):
         print('小猫在叫')
    pass
d=Dog()
d.eat()
c=Cat()
c.eat()
c.drink()


#多继承
class A(object):
    def a(self):
        print('A类的方法输出')
class B(object):
    def b(self):
        print('b类的方法的输出')
class C(A,B):  #C类中并没有方法,是继承自A和B
    pass
c=C()
c.a()
c.b()



#当多个父类中存在相同的方法时,应该调用哪个方法
class Z(object):
    def eat(self):
        print('D.eat')
        pass
    pass
class Y(Z):
    def eat(self):
        print('Y.eat')
        pass
    pass
class X(Z):
    pass
class S(X,Y):  #首先在S中查找eat方法,如果没有,就去X中查找eat方法,如果没有,再去Y中查找,如果Y中没有,就去Z中查找
    pass
s=S()
s.eat()
print(S.__mro__)



运行的结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值