向类添加动态属性
在使用模拟类模拟数据库结果集的过程中,出现了一个挑战:如何分配动态属性实例的属性类似于字典的属性。这涉及创建行为类似于具有特定值的属性的属性。
最初,一种有前景的方法涉及使用以下方式分配属性:
setattr(self, k, property(lambda x: vs[i], self.fn_readyonly))
然而,这产生了属性对象,而不是所需的行为。
解决方案在于向类添加属性本身,而不是个别实例。它的工作原理如下:
class Foo(object): pass foo = Foo() foo.a = 3 Foo.b = property(lambda self: self.a 1) print(foo.b) # Prints 4
在此示例中,我们使用属性描述符向 Foo 类添加属性 b。当访问 foo.b 时,Python 调用描述符的 __get__ 方法并将类实例作为参数传递。然后 __get__ 方法返回属性的值,该值计算为 self.a 1。
属性提供了一种方便的方法来定义属性的自定义行为,有效地公开了 Python OO 系统的管道。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3