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 函数之后将类属性绑定到了实例对象上,以提高性能。

posted @ 2021-07-20 11:01  GWZHG  阅读(100)  评论(0)    收藏  举报