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