有没有办法自动将对象方法转换为外部函数?

时间:2016-07-04 08:16:55

标签: python

只是为了说明一下:

class newobj:
    def __init__(self, val):
        self.value = val
    def mul2(self):
        self.value = 2*self.value

有没有办法自动将方法newobj.mul2转换为可以这样调用的函数mul2

o = newobj(5)
mul2(o)

新函数mul2最好知道断言输入是newobj的实例,但这不是强制性的。

1 个答案:

答案 0 :(得分:3)

只需将绑定方法分配给变量:

o = newobj(5)
mul2 = o.mul2

你没有 来调用同一个表达式中的方法,可以只引用该属性。

演示:

>>> class newobj:
...     def __init__(self, val):
...         self.value = val
...     def mul2(self):
...         self.value = 2*self.value
...
>>> o = newobj(5)
>>> o.mul2
<bound method newobj.mul2 of <__main__.newobj instance at 0x1059d4440>>
>>> mul2 = o.mul2
>>> o.value
5
>>> mul2()
>>> o.value
10
>>> mul2()
>>> o.value
20

如果您需要通用&#39;功能&#39;在newobj的实例上运行,只需引用类上的方法并每次手动传入实例:

mul2 = newobj.mul2
mul2(o)

演示:

>>> o = newobj(5)
>>> mul2 = newobj.mul2
>>> o.value
5
>>> mul2(o)
>>> o.value
10