Я украшал метод класса другим методом класса. Класс выглядит так
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
. - person Sven Marnach   schedule 26.07.2014