如何将功能绑定到对象?

时间:2019-02-09 20:43:52

标签: python class methods bind

考虑以下代码:

class SomeClass:
    def __init__(self, i):
        self.i = i

    def some_method(self):
        def returned_method(self, new_i):
            self.i = new_i
        return returned_method

some_obj = SomeClass(5)
some_obj.some_method()(6)
print(some_obj.i)

ends with an exception

Traceback (most recent call last):
  File "./prog.py", line 11, in <module>
TypeError: returned_method() missing 1 required positional argument: 'new_i'

很显然,some_method返回的方法是未绑定的。它没有将some_obj作为其第一个参数。

如何将returned_method中的some_method绑定到self

1 个答案:

答案 0 :(得分:1)

returned_method 不是一种方法;这是一个普通的功能。无需将其声明为带有两个参数。

def some_method(self):
    def _(new_i):
        self.i = new_i
    return _

_(不需要给它指定任何特定的名称)不需要self作为参数,因为它是传递给some_method的参数的闭包。

它的使用方式与以前相同:

some_obj = SomeClass(5)
some_obj.some_method()(6)
print(some_obj.i)