functools.partialmethod
Возвращает дескриптор, частично применяющий к методу указанные аргументы.
functools.partialmethod(func[, *args][, **kwargs])
-> callable
func -- Объект, поддерживающий вызов (например: функция, метод, дескриптор), к которому требуется частично применить аргументы.
*args -- Позиционные аргументы, которые требуется применить к методу func.
**kwargs -- Именованные аргументы, которые требуется применить к методу func.
*args -- Позиционные аргументы, которые требуется применить к методу func.
**kwargs -- Именованные аргументы, которые требуется применить к методу func.
Возвращает дескриптор, ведущий себя как functools.partial(), но позволяющий определять методы класса.
В случаях, когда в аргументе
Если в аргументе
from functools import partialmethod
class Printer:
def _print_me_obj(self, value):
print('%s %s' % (value, self))
@classmethod
def _print_me_cls(cls, value):
print('%s %s' % (value, cls))
print_yes = partialmethod(_print_me_obj, 'YES')
print_maybe = partialmethod(_print_me_cls, 'MAYBE')
# Попробуем связанный метод (метод объекта).
printer = Printer()
printer.print_yes() # YES < __main__.Printer object at 0x7f5eac473d68>
# А теперь попробуем метод класса.
Printer.print_maybe() # MAYBE < class '__main__.Printer'>
В случаях, когда в аргументе
func
передан дескриптор (например: classmethod(), staticmethod(), abstractmethod(), или обычная функция), обращения к __get__ делегируются нижележащему дескриптору, и возвращается соответствующий partial-объект.Если в аргументе
func
передан объект, поддерживающий вызов, не являющийся дескриптором, то соответствующий связанный метод создаётся динамически. Эффект получается таким же, как при использовании обычной функции в качестве метода: аргумент self
устанавливается первым позиционным аргументом, не смотря на то, что args
и kwargs
уже были переданы в инициализатор partialmethod
.
Синонимы поиска: functools.partialmethod, functools, partialmethod
На заметку
Зарегистрированные пользователи могут публиковать свои мнения относительно Книг, Видео, Статей других авторов и прочего в разделе Обсуждений.