魔法方法:属性访问

__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
    
原文地址:https://www.cnblogs.com/themost/p/6505230.html