有没有办法创建一个函数,可以像调用Python方法一样调用它?

14 浏览
0 Comments

有没有办法创建一个函数,可以像调用Python方法一样调用它?

在Python中,如何向现有对象(即不在类定义中)添加方法?

我理解这通常被认为是不良实践,除了某些情况外。

0
0 Comments

在Python中,函数和绑定方法之间存在区别。绑定方法已经“绑定”到一个实例上,每当调用该方法时,该实例将作为第一个参数传递。

而作为类的属性的可调用对象仍然是未绑定的,因此可以在任何时候修改类定义。

然而,当想要将方法附加到单个实例时,就会出现问题。直接将函数附加到实例时,它不会自动绑定。

为了解决这个问题,可以使用types模块中的MethodType函数进行绑定。

这种情况下,其他类的实例不会受到影响。

除了更易读之外,使用描述符协议手动调用并使函数生成实例的方法相比创建MethodType还有其他优势。

通过描述符协议,可以确保它能够像在实例上访问属性一样正常工作。它适用于classmethod、staticmethod和其他描述符。

使用描述符方法的完整代码是a.barFighters = barFighters.__get__(a)。

需要注意的是,在Python 3中没有未绑定方法,因为函数和未绑定方法之间的区别非常小,Python 3取消了这种区别。

虽然有人建议不要这样做,但什么情况下可能会这样做呢?例如,在进行交互式编程时,已经定义了一个类,我们希望能够编辑一些方法或者添加新的方法进行调试,而不用重新计算整个类。这种情况下,是否可以合理地临时使用这种方法,还是有更好的替代方案呢?

0