__getattr__(self,name) 当用户试图访问name,而name属性不存在时就会调用getattr
__getattribute__(self,name) 当用户试图访问name时就会调用getattribute
__setattr__(self,name,value)当name被设置为value的时候就会调用setattr
__delattr__(self,name)当name属性被删除时就会调用delattr
只有重写以上四个魔法方法,就可以改变属性访问
class Rectangle: def __init__(self,width=0,height=0): self.width = width self.height = height def __setattr__(self,name,value): if name == 'square': self.width = value self.height = value else: #super().__setattr__(name,value) self.__dict__[name] = value def getArea(self): return self.width * self.height