zoukankan      html  css  js  c++  java
  • day28

    元类:用来产生类的类,主要用来限制类,满足某些条件

    #一切皆对象,类也是对象,可以把类当成普通对象来使用
    #动态语言:是指程序运行时可以改变其结构       静态语言:静态类型语言的类型判断实在运行前判断(如编译阶段)

    class type()
    """
    生成类的类,系统的元类
    """
       def __init__(cls,what,bases=None,dict=None)
       """
      type(object_or_name, bases, dict)
      type(object) -> the object's type
      type(name, bases, dict) -> a new type
      再类对象初始化的时候会自动传入参数
      """

    exec(code,globals,locals) #执行字符串式的python代码
    eval(code) #用于执行简单的表达式,不能有特殊语法



    #就算__init__中什么都不写,这个类对象其实已经创建完成了,于普通类不同
    class A_Metaclass(type):
       """
      自定义元类
      type:继承元类type
      """
       def __init__()
      type.__init__(self,c_name,bases,c_dict)
          if not self.__doc__ :
              raise BaseException
       
       def __new__(cls,*args,**kwargs):
           
       """  
      cls:A_Metaclass,表示元类自己
      该方法会在实例化对象时自动调用并且在init之前调用
      在元类其作用是用于创建新的类对象的
      """
       pass

    class Student(metaclass = A_Metaclass)

    pass
    ------------------------------------------

    异常:

    """
    异常是错误发生的信号,一但程序出错就会产生一个异常,如果该异常没有被应用程序处理,那么该异常就会抛出来,程序的执行也随之终止
    1.语法检测异常
    在语法检测阶段出现的异常
    2.运行时异常
    已经通过了语法检测,开始执行代码,执行过程中发生异常,称之为运行时异常

    异常的三部分:
    Traceback   异常追踪信息 用于展示错误发生的具体位置,以及调用的过程
    其中包含了错误发的模块,错误发生的模块 文件路径   行号 函数名称 具体的代码
      错误类型,详细信息              
    """
    '''
    断言assert
    断言 其实可以理解为断定的意思
    类似于if else 的判断,通过则执行代码,不通过则抛出异常
    '''
    assert path.endswith("mp3")
    print("播放%s" % path)

    '''
    try后面可以跟多个except,多个异常类可以是不同异常类型
    '''
    try:
        name
    except Exception as e:
       print(e)

       
    '''
    raise用于主动抛出异常,可以主动编写一个异常类,继承Exception
    '''    
    class FileTypeException(Exception):
       pass  
       
    raise FileTypeException("仅能播放mp3格式.....")

    单例模式:

    """"
    一种设计模式,单个实例的意思
    当你需要让你的类仅有一个实例时,那就使用单例模式
    """
    class SingletonMetaClass(type):
       def __init__(self,c_name,bases,c_dict):
           self.c_name = c_name
           self.bases = bases
           self.c_dict = c_dict
           self.obj = None
           
       def __call__(self,*args,**kwargs):
           if self.obj:
               return self.obj
           obj = type.__call__(self,*args,**kwargs)    
           self.obj = obj
           return obj


    class Person:
       def __init__():
           pass
    class Teacher:
       def __init__():
    pass
  • 相关阅读:
    tomcat使用不同的jdk版本 liunx 装两个jdk
    接下来自己的研究对象
    钉钉小程序开发的所有坑
    java 在web应用中获取本地目录和服务器上的目录不一致的问题
    Python2.7更新pip:UnicodeDecodeError: 'ascii' codec can't decode byte 0xb7 in position 7: ordinal not in range(128)
    vue项目中禁止移动端双击放大,双手拉大放大的方法
    JZ56 删除链表中重复的结点
    JZ55 链表中环的入口结点
    JZ54 字符流中第一个不重复的字符
    JZ53 表示数值的字符串
  • 原文地址:https://www.cnblogs.com/zhuqihui/p/10920229.html
Copyright © 2011-2022 走看看