二十四.面向对象(约束)
一. 约束
1.什么是接口以及作用 接口是一种数据类型 主要是用于约束派生类中必须实现指定的方法 而在python1中不存在 java和c# 中是存中的 2.python 中使用过什么方法来约束的呢 抽象类 + 抽象方法 来约束 编写上比较麻烦 人为主动抛出异常 3.约束时 抛出异常是否可以用于其他的 不专业 raise Exception(".send() 方法必须重写") 专业 raise NotImplementedError("send()必须重写") print("****************************************************************************") # 约束方式一 人为主动抛出异常 # 应用场景 内部必须有某些方法时 需要用基类 + 异常进行约束 class Per(object): # Per这个类主要用于约束 def sends(self,x): # 如果这里有参数 下面方法重写时也必须带参数 """ 必须继承Per 然后其中必须编写sends()方法 用于完成具体逻辑代码 """ raise NotImplementedError("必须重写sends()方法") class Son(Per): def sends(self,x): # 必须继承Per然后其中必须编写sends()方法用于完成具体逻辑代码 print("哈哈哈哈哈哈哈") class Far(Per): def sends(self,x): # 必须继承Per然后其中必须编写sends()方法用于完成具体逻辑代码 print("啦啦啦啦啦啦啦啦啦啦啦") f1=Far() f1.sends(22) print("****************************************************************************") # 约束方式二 使用抽象类 + 抽象方法 from abc import ABCMeta,abstractmethod class Mr(metaclass=ABCMeta): #抽象类 def run1(self): print("哈哈啊哈哈哈哈哈") @abstractmethod # 抽象方法 def run2(self): print("啦啦啦啦啦啦") class Da(Mr): def run2(self): # 抽象方法来约束 print(111111111111111) aa=Da aa.run2(aa) aa.run1(aa) # 啦啦啦啦啦啦啦啦啦啦啦 # 111111111111111 # 哈哈啊哈哈哈哈哈 # pip install djangorestframework # from rest_framework.authentication import SessionAuthentication # from rest_framework import exceptions print("****************************************************************************")
# python 原生不支持 支持多继承 # 接口类 python 原生不支持 支持多继承 # https://segmentfault.com/a/1190000007921371 from abc import abstractmethod,ABCMeta class Payment(metaclass=ABCMeta): # metaclass=ABCMet 元类 type 说明就要写一个类的规范 来约束 @abstractmethod def pay(self,money):pass # 规范: metaclass=ABCMeta 必须指定元类 必须加装饰器 # 接口类 默认多继承 接口类中的所的方法都不能实现 pass class Wechat(Payment): def pay(self,money): print("这是微信支付%s元" %money) class Ali(Payment): def pay(self,money): print("这是支付宝支付%s元"%money) class Apple(Payment): def pay(self,money): print("这是苹果支付%s元"%money) def lover(lei,qi): lei.pay(qi) # aa=Wechat() bb=Ali() cc=Apple() lover(aa,100) lover(bb,200) lover(cc,300)
print("********************************************************************88")
class Wechat(): def pay(self,money): print("这是微信支付%s元" %money) class Ali(): def pay(self,money): print("这是支付宝支付%s元"%money) class Apple(): def pay(self,money): print("这是苹果支付%s元"%money) def lover(lei,qi): lei.pay(qi) aa=Wechat() bb=Ali() cc=Apple() lover(aa,100) lover(bb,200) lover(cc,300) # 这是微信支付100元 # 这是支付宝支付200元 # 这是苹果支付300元