我有一个类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 函数之后将类属性绑定到了实例对象上,以提高性能。
原文:https://www.cnblogs.com/zihaoyf/p/15033839.html