2024-04-26 23:07:30 发布
网友
假设我有一个类Foo,我有{}。我需要某种“方法名称空间”foo.bar,它不在Foo实例之间共享,我可以动态地向其中添加操作foo的方法:
Foo
foo.bar
foo
def method(self, someValue): self.value = someValue + 10 foo.bar.m = method foo.bar.m(20)
然后我想知道foo.value是30。在
foo.value
有什么办法做到的吗?在
这就是你要找的吗?在
import types class Namespace(object): pass class Foo(object): def __init__(self, value): self.value = value self.bar = Namespace() def function(self, new_value): self.value = new_value a = Foo(1) b = Foo(2) b.bar.function = types.MethodType(function, b, Foo) b.bar.function(6) print a.value # prints 1 print b.value # prints 6
诀窍是使用types模块将测试函数转换为可以绑定到对象实例的方法。在
types
当我运行这行代码:b.bar.function = types.MethodType(function, b, Foo)时,我实际上是告诉Python创建一个新方法,将function绑定到Foo的b实例。然后我可以使用这个方法并将其存储在任意位置。在
b.bar.function = types.MethodType(function, b, Foo)
function
b
由于方法永久绑定到b实例Foo,self将始终引用{},而不管该方法实际分配给哪个对象。在
self
这就是你要找的吗?在
诀窍是使用
types
模块将测试函数转换为可以绑定到对象实例的方法。在当我运行这行代码:
b.bar.function = types.MethodType(function, b, Foo)
时,我实际上是告诉Python创建一个新方法,将function
绑定到Foo
的b
实例。然后我可以使用这个方法并将其存储在任意位置。在由于方法永久绑定到},而不管该方法实际分配给哪个对象。在
b
实例Foo
,self
将始终引用{相关问题 更多 >
编程相关推荐