1. 程式人生 > 其它 >python 類屬性繫結到類的例項屬性

python 類屬性繫結到類的例項屬性

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 函式之後將類屬性繫結到了例項物件上,以提高效能。