from functools import partialmethod new_method = partialmethod(func, /, *args, **keywords)
func
- дескриптор или метод класса,*args
- позиционные аргументы func
,*keywords
- ключевые аргументы func
.func
.Класс partialmethod()
модуля functools
возвращает новый дескриптор метода func
, который ведет себя как функция functools.partial()
, за исключением того, что он предназначен для использования в качестве определения метода, а не для прямого вызова.
Аргумент func
должен быть дескриптором (определяет методы __get__()
, __set__()
или __delete__()
или вызываемым методом класса.
Когда func
является дескриптором, таким как обычная функция Python, classmethod()
, staticmethod()
или другой экземпляр partialmethod()
, вызовы __get__
делегируются базовому дескриптору и в результате возвращается соответствующий partial
объект.
Когда func
не является дескриптором, то соответствующий связанный метод создается динамически. Она ведет себя как обычная функция Python при использовании в качестве метода: аргумент self
будет вставлен в качестве первого позиционного аргумента, до аргументов и ключевых слов, предоставленных конструктору partialmethod()
.
from functools import partialmethod class Cell(object): def __init__(self): self._alive = False @property def alive(self): return self._alive def set_state(self, state): self._alive = bool(state) set_alive = partialmethod(set_state, True) set_dead = partialmethod(set_state, False) >>> c = Cell() >>> c.alive # False >>> c.set_alive() >>> c.alive # True