Python类中的方法名称空间/集合
假设我有一个类Python类中的方法名称空间/集合,python,class,methods,namespaces,Python,Class,Methods,Namespaces,假设我有一个类Foo,我有Foo=Foo()。我想要某种“方法名称空间”foo.bar,它不在foo实例之间共享,我可以动态地向其中添加在foo上操作的方法: def method(self, someValue): self.value = someValue + 10 foo.bar.m = method foo.bar.m(20) 然后我想找到foo.value是30 有什么办法可以做到这一点吗?这就是你想要的吗 import types class Namespace(ob
Foo
,我有Foo=Foo()
。我想要某种“方法名称空间”foo.bar
,它不在foo
实例之间共享,我可以动态地向其中添加在foo
上操作的方法:
def method(self, someValue):
self.value = someValue + 10
foo.bar.m = method
foo.bar.m(20)
然后我想找到foo.value
是30
有什么办法可以做到这一点吗?这就是你想要的吗
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
模块将测试函数转换为可以绑定到对象实例的方法
当我运行这一行时:b.bar.function=types.MethodType(function,b,Foo)
,我实际上是在告诉Python创建一个新方法,将function
绑定到Foo
的b
实例。然后,我可以使用此方法并将其存储在任意位置
由于该方法永久绑定到
Foo
的b
实例,self
将始终引用b
,无论该方法实际分配给哪个对象。我不明白。您的目标是为类foo
的某些(但不是所有)实例修改foo.value
?我希望method
中的self
在被称为foo.bar.m(someInt)时引用foo