zoukankan      html  css  js  c++  java
  • 二十四.面向对象(约束)

    一. 约束

    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元
  • 相关阅读:
    Nginx 413 Request Entity Too Large
    Docker 搭建一个多端同步网盘-Nextcloud
    FTP主动模式(PORT)与被动模式(PASV)
    Linux安装与使用FTP服务-vsftpd
    Mac FTP工具推荐-Transmit
    Nginx配置动静分离
    Nginx解决跨域问题(CORS)
    CentOS 7 之找回失落的ifconfig
    CentOS 7 之安装篇
    深入研究MiniMVC之后续篇
  • 原文地址:https://www.cnblogs.com/Sup-to/p/11105353.html
Copyright © 2011-2022 走看看