是否可以装饰functionmethod __get__方法?

问题描述 投票:0回答:1

我想了解方法作为描述符是如何工作的。

有这样的写法。这个:

为了支持方法调用,函数包括 __get__() 方法,用于在属性访问期间绑定方法。这意味着所有的函数都是非数据描述符,当它们从一个对象中被调用时,会返回绑定方法。

基于这种描述以及 "Dotted access from a class calls __get__()" 我以为可以装饰 __get__ 的类方法。

我想把 someFunction.__get__:

def wrap(func):
    def wrapped(*args, **kwargs):
        print("Wrapping...")
        return func(*args, **kwargs)
    return wrapped

class SomeClass():
    def someFunction(self):
        print("someFunction called")
    someFunction.__get__ = wrap(someFunction.__get__)

obj = SomeClass()
obj.someFunction()

产出只是 "someFunction called" 仿佛什么都没有改变。

所以我的问题是:为什么 Wrapping... 日志没有打印出来吗?"分配"。

someFunction.__get__ = wrap(someFunction.__get__)

有什么问题吗?

python function get descriptor
1个回答
1
投票

描述符 文档中的方法。

以下方法只有在包含该方法的类的实例(所谓的 描述符 类)出现在一个 主人 类(描述符必须在所有者的类字典中或其父类的类字典中)。

我的理解是,这意味着有某种神奇的力量在发挥作用,要求 __get__ 要在类中定义(在本例中是函数)。如果你把它添加到一个实例中就不行了。我猜Python在定义描述符类时必须做某种初始化。

© www.soinside.com 2019 - 2024. All rights reserved.