一.异常
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,'男')