内置方法
1. __init__ # 在实例化的时候自动调用该方法 # __str__ class Student(): def __init__(self, name, age): self.name = name self.age = age # 打印或者输出对象的时候,自动调用的方法 def __str__(self): return 'name:%s' % self.name # return 123 # 返回结果是字符串,不能是整型 stu = Student('tom', 19) # print(stu) __del__ class Student(): def __init__(self, name, age): self.name = name self.age = age # self.f = open('a.txt') # 1. del 删除对象的时候自动触发 # 2. 当整个程序执行完毕在调用方法 def __del__(self): print('触发了') # self.f.close() stu = Student('tom', 19) del stu print(123) # __enter__ __exit__ class Open: def __init__(self,name): self.name=name def __enter__(self): print('出现with语句,对象的__enter__被触发,有返回值则赋值给as声明的变量') # return self def __exit__(self, exc_type, exc_val, exc_tb): print('with中代码块执行完毕时执行我啊') with Open('a.txt') as f: print('=====>执行代码块') with open('a.txt', 'r', encoding='utf-8') as f: f.read() class Foo: x = 1 def __init__(self, y): self.y = y # pass def __getattr__(self, item): print('----> from getattr:你找的属性不存在') # 当设置的属性不存在的时候触发 def __setattr__(self, key, value): print('----> from setattr') print(key, value) # self.a = 200 # self.key=value #这就无限递归了,你好好想想 self.__dict__[key]=value #应该使用它 def __delattr__(self, item): print('----> from delattr') # del self.item #无限递归了 # self.__dict__.pop(item) # __setattr__添加/修改属性会触发它的执行 f1 = Foo(10) # print(f1.y) # f1.a = 200 del f1.a class Foo: def __init__(self): pass # 对象加括号 def __call__(self, *args, **kwargs): print('__call__') obj = Foo() # 执行 __init__ obj()
反射
# 通过字符串操作属性 # 掌握4个方法即可 1. getattr() 2. setattr() 3. hasattr() 4. delattr() class Student(): school = 'SH' def func(self): print('from func') stu=Student() # print(stu."school") # print(getattr(stu, 'school', 123)) # print(getattr(stu, 'func')) # getattr(stu, 'func')() # 2. setattr() # setattr(stu, 'x', 100) # print(stu.__dict__) # 3. hasattr # print(hasattr(stu, 'school')) # 4. delattr # stu.x = 1 # delattr(Student, 'school') # print(Student.__dict__)
异常
1. 什么是异常? 异常就是错误发生的信号,如果不对该信号做处理,程序就会终止运行 2. 为什么要用异常? 为了增加代码的健壮性 3. 如何使用异常? try: pass except 异常的类型: pass except 异常的类型: pass except 异常的类型: pass else: print('当没有发生异常的时候执行') finally: print('不管有没有异常都会执行') # 主动抛出异常 class Animal(): def speak(self): raise Exception('必须实现speak方法') class Student(Animal): def speak(self): pass stu = Student() stu.speak() # 自定义异常 class MyException(BaseException): def __init__(self, msg): self.msg = msg def __str__(self): return self.msg raise MyException('出问题啦')
浙公网安备 33010602011771号