class TestCase: att_1 = 'hello' # 定义类属性 att_2 = 'python' def test_func(self): # 定义方法 print("这是一个方法") def __getattribute__(self, item): # 属性访问拦截器:当对象访问属性时,会自动触发这个方法,由这个方法来决定返回的属性值 # 应用场景:访问不存在的属性时,不希望它报错,可以用try--except来捕获异常返回一个值或提示信息 # try: # return super().__getattribute__(item) # 调用父类真正的__getattribute__方法返回正确的属性值 # except AttributeError: # print(item,':该属性不存在!') # 如果使用了try方法就不会触发__getattr__方法了,因为找不到属性时的异常已经在这里被捕获了 print("我是__getattribute__,我正在工作") return super().__getattribute__(item) # 调用父类的方法,返回找到的结果,不调用就不会返回 def __getattr__(self, att_name): # 当对象访问属性时,属性不存在,引发异常,会被__getattr__方法捕获 # 然后执行该方法的代码,相当于自带捕获异常 print("我是__getattr__,我正在工作") return att_name + "这是我要找的东西,但是我找不到" def __setattr__(self, att_name, value): # 设置属性的时候就会触发该方法 print("我是__setattr__,我正在工作") super().__setattr__(att_name, value) # 调用父类的方法,设置属性,不调用就不会真的设置属性 def __delattr__(self, att_name): print("我是__delattr__,我正在工作") print("这是我即将删除的东西{}".format(att_name)) super().__delattr__(att_name) # 调用父类的方法,删除属性,不调用就删除不了 res = TestCase() # 实例化对象 print('-----------------访问属性----------------') print(res.att_1) # 访问类属性,通过运行结果看res实例对象访问属性时通过了方法__getattribute__ print('\n-----------------访问不存在的属性----------------') print(res.att_3) print('\n-----------------设置属性----------------') res.att_3 = 'new_attr' print('\n-----------------删除属性----------------') del res.att_3
原创文章,转载请注明出处:http://124.221.219.47/article/456231/