二十四.面向对象(约束)

一. 约束

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元

 

posted @ 2019-06-29 00:03  supreme9999  阅读(245)  评论(0编辑  收藏  举报