# 执行相应的方法 触发相应的函数 可以进行相应的限制 制约用户 返回提示信息 # 操作函数属性字典__dict__ class Foo: x=1 def __init__(self,y): self.y = 1 def __getattr__(self, item): print("%s不存在"%item) # 如果实例对象找没有的属性,可以返回提示 并返回None print("__getarrt__") def __delattr__(self,item): print("__delattr__") self.__dict__.pop(item) # 从字典中删除 def __setattr__(self, key, value): # 操作函数属性字典__dict__ print('__setattr__') self.__dict__[key]=value def append(self,p_object): print("---->",p_object) # if type(p_object) is str: # list.append(self,p_object) # super().append(p_object) print(self.__dict__) # __getattr__ f = Foo(1) print(f.y) print(getattr(f,'y')) print(getattr(f,"yyy")) # 返回None f.qqqqq # 调用对象没有这个方法时会执行 # __delattr__ f.__delattr__("y") # 删除属性会触发 # __setattr__ f.z = 2 print(f.__dict__) # {'y': 1, 'z': 2} # append f.append("s")
# __getattr__ python内置方法 在类中定义 在实例方法调用一个类没有的属性时 才会触发 # __getattribute__ 只要实例对象调用类属性是就会触发 这个方法 # 如果没有要调用的属性是会报错 可以使用raise 返回一个错误 提示 class Foo: def __init__(self,x): self.x = x # 用来做授权 def __getattr__(self,item): # item 用来接收属性名称 print("执行__getattr__") def __getattribute__(self, item): # 调用属性时先执行这个属性 print("执行__getattribute__") # 能找到的属性 它自动做返回 raise AttributeError("出现异常") # 找不到的报给getattr f = Foo(2) f.x f.xx
obj['属性'] 时触发
__getitem__ obj['属性'] 触发
__setitem__ ob['属性']=属性的值 触发
__delitem__ del obj['属性'] 触发
obj.属性 时触发
__gerattr__