python classmethod知识_@classmethod的位置

我没有回答您所问的问题,但是下面展示了一个等价于classmethod,用纯Python编写的decorator,因为源代码中的一个是用C编写的,位于{a1}中,正如Mishna在他的答案中所说的那样。在

因此,类方法的思想是使用“描述符”机制,如Python's data model-中所述,并使__get__方法返回一个函数对象,该对象在被调用时将调用原始方法,并预先填充第一个参数:class myclassmethod(object):

def __init__(self, method):

self.method = method

def __get__(self, instance, cls):

return lambda *args, **kw: self.method(cls, *args, **kw)

在Python控制台上:

^{pr2}$

*编辑-更新*

O.p.进一步问:“如果我希望decorator也接受一个参数,init的正确格式是什么?”-在

在这种情况下,不仅仅是__init__需要更改——接受配置参数的装饰器实际上是在“两个阶段”中被调用的——第一个阶段对参数进行了注释,并返回一个可调用的函数——第二个调用只接受实际将被修饰的函数。在

有几种方法可以实现这一点,但我认为最简单的方法是使用一个返回上述类的函数,如:def myclasmethod(par1, par2, ...):

class _myclassmethod(object):

def __init__(self, method):

self.method = method

def __get__(self, instance, cls):

# make use of par1, par2,... variables here at will

return lambda *args, **kw: self.method(cls, *args, **kw)

return _myclassmethod

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值