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/