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
?这段代码令人难以置信地难以理解,也许这就是为什么你不应该这样做的原因……”“我已经读到这种方法是错误的”=>在哪里?如果有人说这是错误的,那么他肯定会解释为什么……这就是问题的目的。我想知道为什么这是错误的。这就是为什么我问你在哪里“读过”这篇文章。