反射
class ClassA: name = 'xiaoming' def __init__(self): self.y = 'y' #先执行 __setattr__ 在执行__getattribute__ self.z = "z" def __getattribute__(self, item): #只有点(.)才会触发此方法,a["dd"] 不会触发和getattr一样 # print(item) if item == "y": # 每次访问属性之前都先执行此方法,可以自定义属性访问的权限 pass else: return super().__getattribute__(item) #必须加否则报错 def __getattr__(self, item): pass #当访问的属性不存在的时候执行此方法注意:obj.__dict__['属性名']不会调用该属性" def __delattr__(self, item): del self.__dict__[item] def __setattr__(self, key, value): #必须要有__setattr__方法 self.__dict__[key] = value a = ClassA() print(a.name) #xiaoming print(a.y) #None print(a.z) #z # 获取属性的三种方式 # print(obj.name) # print(a.__dict__["y"]) #a.__dict__会触发__getattribute__ 但是["y"] 不会触发 # getattr(obj,"name")
: