【发布时间】:2014-07-26 12:21:45
【问题描述】:
我正在用另一个类方法装饰一个类方法。类是这样的
from functools import wraps
class MyClass(object):
def __init__(self):
print('Within my class object')
def my_decorator(func_to_decorate):
@wraps(func_to_decorate)
def wrapper(self):
print('Before the call')
func_to_decorate(self)
print('After the function call')
return wrapper
@my_decorator
def print_name(self):
print('My name is ------ ')
mobj = MyClass()
mobj.print_name()
工作正常,我得到了我需要的输出
Before the call
My name is ------
After the function call
但是在查看装饰器my_decorator的函数定义时,我意识到该方法没有采用类方法通常作为其第一个参数self
我现在的问题是 - my_decorator 的类型是什么?是类方法、普通方法还是特殊方法?
通常,类中的方法采用隐式参数self,或者如果它的类方法采用隐式参数cls。装饰者不接受它们。
谁能解释一下这里发生了什么?
【问题讨论】:
-
附带说明,您将类方法与实例方法混淆了。常规方法称为实例方法,因为它们将实例作为第一个参数
self。类方法是使用装饰器@classmethod创建的,并将类作为它们的第一个参数,通常称为cls。 -
@SvenMarnach 我的错。感谢您纠正我。