Как украсить метод в классе?

Я нашел, что ярлык "Супер +W" показывает все окна, даже если существует проблема, которую Вы описываете. Так, просто временное решение, но это работает хорошо :-)

52
задан martineau 8 January 2019 в 11:54
поделиться

2 ответа

Python автоматически передает экземпляр класса в качестве ссылки. (Аргумент self , который присутствует во всех методах класса.)

Вы можете сделать:

def formatHeader(fn):
    def wrapped(self=None):
        return '<div class="page_header">'+fn(self)+'</div>'
    return wrapped
34
ответ дан 7 November 2019 в 09:22
поделиться

Вы опускаете параметр self, который присутствует в недекорированной функции (createHeader в вашем случае).

def formatHeader(fn):
    from functools import wraps
    @wraps(fn)
    def wrapper(self):
        return '<div class="page_header">'+fn(self)+'</div>'
    return wrapper

Если вы не уверены в сигнатуре функции, которую хотите украсить, вы можете сделайте это довольно общим следующим образом:

def formatHeader(fn):
    from functools import wraps
    @wraps(fn)
    def wrapper(*args, **kw):
        return '<div class="page_header">'+fn(*args, **kw)+'</div>'
    return wrapper
60
ответ дан 7 November 2019 в 09:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: