如何解决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 举报,一经查实,本站将立刻删除。