微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python 中的 @classmethod 装饰器在内部做了什么?

如何解决Python 中的 @classmethod 装饰器在内部做了什么?

我知道如何使用@classmethod 装饰器,但我想知道它在内部对它装饰的函数做了什么?它如何获取调用的类/对象将其作为装饰函数的第一个参数传递?

谢谢

解决方法

@classmethod 是一个 Python 描述符 - https://github.com/paulyoder/LinqToExcel/pull/125,Python 3

您可以从对象或类调用装饰方法。

class Clazz:

    @classmethod
    def f(arg1):
        pass

o = Clazz()

如果你打电话:

o.f(1)

它实际上会被调用 f(type(o),*args)

如果你打电话:

Clazz.f(1)

它实际上会被调用 f(Clazz,*args)

在文档中,纯 python 类方法看起来像:

class ClassMethod(object):
"Emulate PyClassMethod_Type() in Objects/funcobject.c"

def __init__(self,f):
    self.f = f

def __get__(self,obj,klass=None):
    if klass is None:
        klass = type(obj)
    def newfunc(*args):
        return self.f(klass,*args)
    return newfunc

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。