• 第二十一天


    今日内容

    一、多态与多态性

    1.1多态

      多态:同一种事物有多种形态
      主要不是用来让子类重用代码的,而是统一多个子类使用同种功能的方法
      例:
      class Animal:
          def talk(self):
              pass
    
      class Dog(Animal):
          def talk(self):
              print("汪汪汪")
    
      class Cut(Animal):
          def talk(self):
              print("喵喵喵")
    
      class Pig(Animal):
          def talk(self):
              print("哼哼哼")
    
      obj1 = Dog()
      obj2 = Cut()
      obj3 = Pig()
    

    1.2鸭子类型

      本质其实不是继承同一个父类的功能,而是为了统一标准
      1、可以不采用继承方法,而是用协商的方式让对象的功能名统一化
    
      2、使用abc模块,但凡继承这个父类的子类们内必须有与父类同名的功能
      如果没有的话子类在实例化时会报错
      import abc
      class Animal(metaclass=abc.ABCMeta):
          @abc.abstractmethod
          def talk(self):
              pass
    

    二、面向对象高级

    2.1内置函数

      1、isinstance:判断一个对象是否是一个类的实例
      例:
      class Foo:
          pass
      obj = Foo()
      print(isinstance(obj,Foo))
    
      2、issubclass:判断一个类是否是另一个类的子类
      例:
      print(issubclass(Foo,object))
    

    2.2内置方法

      __开头并且__结尾的属性会在满足某种条件下自动触发
      例一、
      class People:
          def __init__(self,name,age):
              self.name = name
              self.age = age
    
          def __str__(self):       #打印对象时,自动触发__str__内代码运行,
              return f"{self.name}:{self.age}"  #并把返回值交给print打印,返回值必须是字符串类型
    
      obj = People("xxx",18)
      print(obj)
    
      例二、
      class People:
          def __init__(self,name,age):
              self.name = name
              self.age = age
              self.f = open("a.txt",mode="wt",encoding="utf-8")
    
          def __del__(self):    #在删除对象时,会自动触发__del__内代码,包括程序结束时也会触发
              self.f.close()  #主要是用来完成资源回收的
    
      obj = People("xxx",18)
    

    三、反射

    3.1反射

      通过字符串来映射到真正的功能身上
      class People():
          country = "china"
          def __init__(self,name,age):
              self.name = name
              self.age = age
    
      obj = People("xxx",18)
    
      print(hasattr(obj,"country"))      #判断字符串内容是否能被obj调用,即obj.country能不能被调用
    
      res = getattr(obj,"country")       #拿obj内的属性,即obj.country的内容
      print(res)
    
    
      setattr(obj,"xxx",1111)         #为obj添加一个属性,即 obj.xxx = 1111
      print(obj.xxx)
    
      delattr(obj,"name")           #删除obj内的属性
      print(obj.name)
    

    四、异常处理

    4.1异常处理

      '''
      1、什么是异常:
          异常是错误发出的信号
          程序一旦出错就会产生一个异常
          如果该异常没有被处理,该异常就会被抛出。程序的运行也随机终止
    
          错误分成两种:
              1、语法错误
              2、逻辑错误
      2、为何要处理异常:
          不应该让程序出现崩溃
    
      3、如何处理异常:
          1、语法错误:
              程序运行前就必须改正确
          2、逻辑错误:
              针对可以控制的逻辑错误,应该直接在代码层面解决
              正对不可控制的逻辑错误,应该采用try...exceot...的方式解决
    
      4、try...execpet一种异常产生之后的补救措施
      tyr:
          被检测的代码块1
          被检测的代码块2
          被检测的代码块3
      execpet 异常的类型1 as e:
          处理异常的代码
      execpet 异常的类型2 as e:
          处理异常的代码
      execpet 异常的类型3 as e:
          处理异常的代码
      except (异常的类型4,异常的类型5,异常的类型6)as e:    #如果是异常4,5,6都运行这段代码
          处理异常的代码
      except Exception:         #都不属于以上所有异常才运行
          处理异常的代码
      else:
          没有发生异常时执行的代码
      finally:
          无论有没有异常都会执行该代码,通常用来惊醒回收资源的操作
      '''
      
      例1:匹配到了异常程序并不会崩溃
      print("start...")
      try:
          print(111)
          print(222)
          l = [11,22,33]
          l[100]
          print(333)
      except IndexError as e:
          print(e)
      print("end...")
    
      例2:没有匹配到异常运行到逻辑错误时程序照样会崩溃
      print("start...")
      try:
          print(111)
          print(222)
          l = [11,22,33]
          l[100]
          print(333)
      except KeyboardInterrupt as e:
          print(e)
      print("end...")
    

    4.2常见异常类型

      1、IndexError:列表索引异常
      2、KeyError:字典取值异常
      3、AttributeError:对象调用不存在异常
      4、ValueError:值出现异常
      5、ZeroDivisionError:数学层面异常
      6、TypeError:函数参数异常
      7、NameEooro:名字没有定义异常
    

    4.3主动抛出异常的三种方式

      1、断言:主要用来测试代码
      判断目标代码块达没达到想要的目的,
      如果达到了就继续运行下方代码,如果没达到就报错
      例:
      l = [111,222]
      assert len(l) == 3    #判断条件是否成立,成立就当不存在,不成立就报错
      print("后续代码")
    
    
      2、raise:主动抛出异常
      为用户定制规则时用户不遵从可以主动抛出异常
      raise IndexError("索引错误")
              自己选择抛出的错误类型
    
    
      3、自定义异常
      例:
      class Permission(BaseException):
          pass
                      #自己填写异常内容
      raise Permission("权限异常")
  • 相关阅读:
    SQLServer 2008(R2)如何开启数据库的远程连接
    SQLServer 中的身份验证及登录问题
    Oracle 远程链接oracle数据库服务器的配置
    nmon 及nmon analyser工具使用简介
    排错-tcpreplay回放错误:send() [218] Message too long (errno = 90)
    Linux  释放Linux 系统预留的硬盘空间
    python 全栈开发,Day126(创业故事,软件部需求,内容采集,显示内容图文列表,MongoDB数据导入导出JSON)
    python 全栈开发,Day125(HTML5+ 初识,HBuilder,夜神模拟器,Webview)
    python 全栈开发,Day124(MongoDB初识,增删改查操作,数据类型,$关键字以及$修改器,"$"的奇妙用法,Array Object 的特殊操作,选取跳过排序,客户端操作)
    python 全栈开发,Day123(图灵机器人,web录音实现自动化交互问答)
  • 原文地址:https://www.cnblogs.com/kk942260238/p/14274482.html
Copyright © 2020-2023  润新知