考虑以下代码:
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)
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
?
答案 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)