# __getattribute__
class Student:
def __init__(self, name):
self.name = name
if 1:
# 对象.attr自动调用该方法
def __getattribute__(self, key):
# 使用super,而不是self.key(递归调用__getattribute__)
# 访问不存在的key时会抛出异常
return super().__getattribute__(key)
if 0:
# 对不存在key进行异常捕获
def __getattribute__(self, key):
try:
return super().__getattribute__(key)
except AttributeError as e:
print(e)
if 1:
# 也可以不在__getattribute__中捕获,只需重写__getattr__
# 若key不存在则会调用该方法
def __getattr__(self, key):
print("__getattr__", key)
# 设置对象属性
def __setattr__(self, key, value):
# super().__setattr__(key, value)
# 可以根据对key进行条件式赋值操作
self.__dict__[key] = value
# 删除对象属性
def __delattr__(self, key):
super().__delattr__(key)
st = Student("zs")
print(st.name) # zs
print(st.not_exist)
st.age = 20
print(st.age)
del st.age
print(st.age)