python普通类实现接口_python--面向对象—接口

开放封闭原则

依赖导致原则

接口隔离原则

继承多态

抽象类和接口类

编程思想:为子类做规范

归一化设计:几个类都实现了相同的方法

抽象类:最好单继承,且可以简单的实现功能

接口类:可以多继承,且最好不实现具体功能

实现接口类和抽象类的语法

from abc importabstractclassmethod,ABCMetaclass Xx(metaclass=ABCMeta):

@abstractclassmethoddef Yy():pass

钻石继承问题

python的新式类,和经典类在继承顺序上的不同

新式类:广度优先

查看继承顺序  子类名.mro()

经典类:深度优先

新式类和经典类的区别:定义阶段,经典类有object新式类不用,子类执行父类中的同名方法上,继承问题

多态

python天生支持多态

接口类

classApplepay:defpayment(self,money):print('苹果 支付了%d元'%money)classAlipay:defpayment(self,money):print('支付宝 支付了%d元'%money)defpayment(pay_obj,money):

pay_obj.payment(money)

apple=Applepay()

ali=Alipay()

payment(apple,100)

payment(ali,100)

归一化设计

from abc importabstractmethod,ABCMetaclass Payment(metaclass=ABCMeta): #抽象类/接口类

@abstractmethod #给接口类加装饰器

def payment(self,money):pass

classApplepay(Payment):defpayment(self,money):print('苹果 支付了%d元'%money)defpayment(pay_obj,money):

pay_obj.payment(money)classAlipay(Payment):defpayment(self,money):print('支付宝 支付了%d元'%money)defpayment(pay_obj,money):

pay_obj.payment(money)classWe(Payment):deffuqian(self,money)print('微信支付了%d元'%money)

apple=Applepay()

ali=Alipay()

we=We()

payment(apple,100)

payment(ali,100)

payment(we,100)

这样的话,如果子类里面没有要用的方法的话,在实例化对象的时候就会报错

如果有这个方法的话,实例化和使用的时候都不会报错。

主要是用来限制和规定某一类必须要用到某个方法

归一化设计:

1.接口类 不实现具体的方法,并且可以多继承

2.实现具体内容,做一些基础实现,并且不推荐多继承

多继承

from abc importabstractclassmethod,ABCMetaclass Fly_Animal(metaclass=ABCMeta):

@abstractclassmethod#限制必须用fly方法

deffly(self):print('飞')classWalk_Animal:defwalk(self):print('走')classSwim_Animal:defswim(self):print('游泳')classTiger(Walk_Animal):defsi(self):pass

class Tiane(Walk_Animal,Swim_Animal,Fly_Animal): #多继承

deffly(self):

super().fly()classQingwa(Walk_Animal,Swim_Animal):deffd(self):passtiane=Tiane()

tiane.fly()

多继承限制

classD:deftest(self):print('D')class B(D): #B要是没有找D

deftest(self):print('B')classC(D):deftest(self):print('C')classA(B,C):pass

#def test(self): #如果没有就去找B,B和D都没有再C

#print('A')

a=A()

a.test()

深度优先↑  新式类广度优先

所有类继承的基类object新式类 python3中不用强制继承

.mro()看顺序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值