1. 程式人生 > 資訊 >江汽集團推出車電分離式純電動輕卡:客戶購買車身,租賃電池

江汽集團推出車電分離式純電動輕卡:客戶購買車身,租賃電池

1、類中的__setattr__、__getattr__、__delattr__ 方法;

class Test(object):
    def __init__(self):
        self.storage = {}

    def __setattr__(self, key, value):
        self.storage[key] = value

    def __getattr__(self, item):
        return self.storage.get(item)   # 會提示改行報錯:RecursionError: maximum recursion depth exceeded
    # 分析:在init中 self.storage = {} 會呼叫 __setattr__ 方法進行屬性設定,而 __setattr__ 方法中的 self.storage[key] 相當於獲取
    # 獲取屬性值,會呼叫 __getattribute__ 方法,然而 __getattribute__ 方法中的 self.storage.get(item) 相當於獲取 self.storage 的
    # 值,從而有會呼叫 __getattribute__ 的方法,如此迴圈;


obj = Test()
obj.data = 32
print(obj.data)

  改進

class Test(object):
    def __init__(self):
        object.__setattr__(self, "storage", {})  # 顯示呼叫父類的屬性設定方法來進行屬性設定,避免當前物件出現迴圈呼叫自身的 __getattr__
        # self.storage = {}

    def __setattr__(self, key, value):
        self.storage[key] = value

    def __getattr__(self, item):
        return self.storage.get(item)


test = Test()
test.data = 32
print(test.data)