python 類屬性繫結到類的例項屬性
阿新 • • 發佈:2021-07-20
python 類屬性繫結到類的例項屬性
例子
我有一個類A和一個B類。我們把B的例項物件作為A的一個類屬性。然後比較使用B的bind方法 和不使用 B的bind方法的區別。
B 類
class B(): @staticmethod def bind(instance): cls = type(instance) for name, obj in cls.__dict__.items(): """ __dict__ 獲取這個物件的所有屬性""" if type(obj) is B: """如果檢測到該 instance 中有BoundClass類屬性 則設定相同的例項屬性。 """ #得到類屬性的值 bound_class_obj = getattr(instance, name) #設定例項屬性 setattr(instance, name, bound_class_obj)
A 類
class A(): """ 例項化B類作為A的類屬性""" b = B() def __init__(self): self.name = "B" """ 使用 B 類的bind函式""" def use_bind(self): B.bind(self) """ 為了方便對比寫了一個列印物件屬性的函式""" def check(self): for key, v in self.__dict__.items(): print(key, v)
測試
print("使用bind函式")
a1 = A()
a1.use_bind()
a1.check()
print("============")
print("不使用bind函式")
a2 = A()
a2.check()
print("============)
執行結果
使用bind函式 屬性名:name 屬性值:B 屬性名:b 屬性值:<__main__.B object at 0x000001F4674E4D30> ============ 不使用bind函式 屬性名:name 屬性值:B ============
結果分析
可以從結果中看到,使用了bind 函式之後將類屬性繫結到了例項物件上,以提高效能。