Python 为什么使用闭包将函数绑定到对象是错误的?
我希望绑定函数能够访问Python 为什么使用闭包将函数绑定到对象是错误的?,python,Python,我希望绑定函数能够访问a。然而,我读到这种方法是错误的。为什么错了?请提供一个推荐方法的示例 class Some(object): a = 1 def __init__(self, function): self.function = function(self) def method(self): print(self.a) def function(self): def inner(): pr
a
。然而,我读到这种方法是错误的。为什么错了?请提供一个推荐方法的示例
class Some(object):
a = 1
def __init__(self, function):
self.function = function(self)
def method(self):
print(self.a)
def function(self):
def inner():
print(self.a)
return inner
thing = Some(function)
thing.function()
我不知道你在哪里读到这种方法是错误的,但这句话肯定有解释,所以也许你应该发布链接 但无论如何:如果重点是添加每个实例的方法,那么已经有了一种内置的方法,python函数实现描述符协议,因此
func.\uuuuu get\uuuuj(obj,type(obj))
将返回一个绑定方法(它本身是函数、实例和类的可调用包装器)。要将函数转换为绑定到实例的方法,只需手动调用描述符协议:
class Other(object):
a = 1
def __init__(self, func):
self.func = func.__get__(self, type(self))
def f(self):
return self.a
o = Other(f)
print("o.func :", o.func())
您的函数当然需要将实例作为第一个参数
如果要向类本身添加方法,则更简单,只需将函数绑定到类,属性解析(对象)将调用描述符协议本身
因此,您的解决方案是否“错误”取决于您如何定义“错误”。至少它在技术上是合法的,有效的,并且没有明显的缺点(或者至少我没有看到任何缺点)-但它不是“明显的”解决方案(尽管)在类外像这样尝试self.a=1
self
<代码>f
,f0
,f1
?这段代码令人难以置信地难以理解,也许这就是为什么你不应该这样做的原因……”“我已经读到这种方法是错误的”=>在哪里?如果有人说这是错误的,那么他肯定会解释为什么……这就是问题的目的。我想知道为什么这是错误的。这就是为什么我问你在哪里“读过”这篇文章。