zoukankan      html  css  js  c++  java
  • day 24

    一.异常

    1.异常处理:避免程序因异常而奔溃,增强程序的健壮性
    2.异常包含三个部分:
        1.traceback:异常的追踪信息
        2.异常的类型
        3.异常的信息
    3.错误分成两大类:
        1.逻辑上的错误
        2.语法上的错误:在程序运行前就应该立即修正
    用法:(当检测到异常时,异常代码的后面代码就不会再执行下去)
    1.单分支:
    try:
        代码块1:
        代码块2
        代码块3
    except NameError:
        print()
    
    
    2.多分支:
    try:
        代码块1:
        代码块2
        代码块3
    except Name1Error:
        print()
    except Name2Error:
        print()
    
    3.try....else.....: #当前面的代码没有检测到异常时,执行else的代码
    try:
        代码块1:
        代码块2
        代码块3
    except Name1Error:
        print()
    except Name2Error:
        print()
    else:
        print()
    4.try.......final....  #无论被检测的代码有没有异常都会执行(控制系统资源)
    try:
        代码块1:
        代码块2
        代码块3
    except Name1Error:
        print()
    except Name2Error:
        print()
    else:
        print()
    final :
        print()

    二.元类:源自于一句话:在Python中一切皆对象
    调用元类 >>>得到自定义类>>>>>(调用)>>>得到自定义的对象
    class关键字自定义创建类的底层工作原理:
    1.拿到类的名字:class_name
    2.拿到类的基类:class_base
    3.拿到类的名称空间:class_dict >>>exec()
    4.调用type()
    自定义一个元类:
    class oldboy:
    school="oldboy"
    def __init__(self,name,age):
    self.name=name
    self.age=age

    class_name="oldboy"
    class_base=(object,)
    class_dict={}
    class_body="""
    school="oldboy"
    def __init__(self,name,age):
    self.name=name
    self.age=age
    """
    exec(class_body,{},class_dict)

    People=type(class_name,class_base,class_dict)
    p=People("jxl",18)
    print(p.__dict__)

    三.自定义元类控制类的产生:(__init__)

    class Mymata(type):
        def __init__(self,class_name,class_base,class_dict):
            if class_name.islower():
                raise TypeError("类名为驼峰体")  #使类的名字必须为驼峰体
            
            doc = class_dict.get("__doc__")     #类中的必须有文档注释
            if doc is None or len(doc)==0 or len(doc.strip("
     "))==0:
                raise TypeError("类中必须要文档注释")
    
    class Oldboy(object,metaclass=Mymata):
            '''
                
            '''
            school="oldboy"
            def __init__(self,name,age,sex):
                self.name=name
                self.age=age
                self.sex=sex

    四.自定义类来控制类调用的过程(__call__)

    总结:对象之所以可以调用,是因为对象的函数中有一个__call__函数.
    创建一个对象的过程
    1.产生一个空对象   obj=self.__new__(self)
    2.对空对象进行初始化操作(将空对象连同括号内的参数一起传给类中的__init__函数中)self.__init__(obj,*args,**kwargs)
    3.返回初始化  return obj
    
    class Mymata(type):
        def __call__(self, *args, **kwargs):
           #得到一个空对象
            obj=self.__new__(self)
           #对对象进行初始化
            self.__init__(obj,*args, **kwargs)
            #返回初始化好的对象
            return  obj
    
    
    class Oldboy(object, metaclass=Mymata):
        school = "oldboy"
    
        def __init__(self, name, age, sex):
            self.name = name
            self.age = age
            self.sex = sex
    
    o=Oldboy("jxl",11,'')
  • 相关阅读:
    yum安装mysql5.7和8.0版本
    centos7永久修改主机名
    centos7 安装 oracle jdk(非open-jdk)
    yum安装Nginx
    该文件没有与之关联的程序来执行该操作。请安装应用,若已经安装应用,请在"默认应用设置
    java 通过url地址 获取视频时长
    获取视频属性工具类
    redis看门狗
    mysql中group_concat函数的使用
    mybatis-config.xml配置
  • 原文地址:https://www.cnblogs.com/jxl123/p/9543576.html
Copyright © 2011-2022 走看看