魔法方法,反射,异常

内置方法(魔法方法简称魔法):

1. __init__
2. __str__,__repr__
	"""
		1. 打印对象或者输出对象的时候,会自动触发
		2. 返回值必须是字符串,不能没有返回值
		3. 如果同时存在的时候,__str__的优先级最高
		4. 一般情况都用了__str__,偶尔也会遇到__repr__
	"""
3. __del__
	"""
		1. 删除对象的时候触发
		2. 当程序全部执行完毕的时候也会触发
		3. 一般用在回收系统资源的时候使用
	"""
4. __doc__
	# 查看类的信息
5. __enter__,__exit__
	'''
		1. 当出现with语句的时候,会触发__enter__
		2. __enter__方法执行之后,开始执行with语法的代码块
		3. 当with语句执行完毕之后,执行__exit__方法
		4. 当with代码块中出现了异常,在__exit__方法中能够得到异常的信息,(异常类型,异常值,追溯信息)
		5. 如果在__exit__方法中:return True,可以清除异常,相当于什么都没发生
	'''
6. __getattr__,__setattr__,__delattr__
	'''
		1. __getattr__:当使用句点符查找不存在的属性的时候触发
		2. __setattr__: 当使用句点符修改存在的属性值或者增加不存在的属性值得时候会自动触发
		3. __delattr__: 删除一个属性的时候,会自动触发
	'''
7. __getitem__,__setitem__,__delitem__
	"""
		1. __getitem__:当通过中括号取值的时候,会自动触发
		2. __setitem__: 当通过中括号改值的时候,会自动触发
		3. __delitem__: 当通过中括号删除值得时候,会自动触发
	"""
8. __call__
	"""
		当给对象加括号调用的时候会自动触发!!!
	"""

反射:

class Teacher:
    def __init__(self,full_name):
        self.full_name =full_name

t=Teacher('Egon Lin')

# hasattr(object,'name')
hasattr(t,'full_name') # 按字符串'full_name'判断有无属性t.full_name

# getattr(object, 'name', default=None)
getattr(t,'full_name',None) # 等同于t.full_name,不存在该属性则返回默认值None

# setattr(x, 'y', v)
setattr(t,'age',18) # 等同于t.age=18

# delattr(x, 'y')
delattr(t,'age') # 等同于del t.age

异常:

1. 主动抛出异常
    # 关键字是:raise
    raise Exception('')
    raise TypeError('')
    raise IndexError('')
    raise KeyError('')
'''父类限制子类的行为:'''

class Animal():
    def speak(self):
        raise Exception('必须实现speak方法')
class People(Animal):
    def speak(self):
        pass

obj = People() #父类用raise的话子类必须实现speak方法,要不就报错
obj.speak()

2. 自定义异常
	# 1. 先写一个自定义类,
    # 2. 继承BaseException
    # 3. raise 抛出异常
3. 断言
	assert 表达式
    '''表达式的条件一定是True,否则直接报错'''
	...
    d = {'token':'dasdasdasdasdasdasdsad'}
    assert 'token' in d

python 
try: 
    被检测的代码块 
except 异常类型1: 
    pass 
except 异常类型2: 
    pass ...... 
else: 没有异常发生时执行的代码块 

finally: 无论有无异常发生都会执行的代码块

 

posted @ 2023-03-22 19:06  无敌大帅逼  阅读(35)  评论(0)    收藏  举报