Python中的@classmethod decorator在内部做什么?

2024-10-01 17:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道如何使用@classmethoddecorator,但我想知道它在内部对它所修饰的函数做了什么?它如何接受类/对象,调用该类/对象将其作为修饰函数的第一个参数传递

谢谢


Tags: 对象函数classmethoddecorator
1条回答
网友
1楼 · 发布于 2024-10-01 17:27:36

@classmethod是一个Python描述符-Python 3Python 2

您可以从对象或类调用修饰的方法

class Clazz:

    @classmethod
    def f(arg1):
        pass

o = Clazz()

如果你打电话:

o.f(1)

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

如果你打电话:

Clazz.f(1)

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

与doc中一样,纯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

相关问题 更多 >

    热门问题