Python类中的方法名称空间/集合

2024-04-26 23:07:30 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一个类Foo,我有{}。我需要某种“方法名称空间”foo.bar,它不在Foo实例之间共享,我可以动态地向其中添加操作foo的方法:

def method(self, someValue):
    self.value = someValue + 10

foo.bar.m = method
foo.bar.m(20)

然后我想知道foo.value是30。在

有什么办法做到的吗?在


Tags: 实例方法self名称foovaluedefbar
1条回答
网友
1楼 · 发布于 2024-04-26 23:07: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绑定到Foob实例。然后我可以使用这个方法并将其存储在任意位置。在

由于方法永久绑定到b实例Fooself将始终引用{},而不管该方法实际分配给哪个对象。在

相关问题 更多 >