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
posted @ 2019-05-24 21:13  月薪20k  阅读(121)  评论(0)    收藏  举报