Python 3.7+typesпонятие
types.WrapperDescriptorType
дескрипторы и обёртки C
Тип «слотовых обёрток» встроенных классов вроде object.__init__ или int.__add__: специальный метод на C, взятый у класса, а не у экземпляра.
Синтаксис
isinstance(obj, types.WrapperDescriptorType)
Если вывести int.__add__, Python покажет <slot wrapper '__add__' of 'int' objects> — это и есть WrapperDescriptorType. Он не FunctionType и не MethodType, поэтому декоратор или проверка, перечисляющие эти типы, его пропустят. Взятый у экземпляра ((1).__add__), он превращается в MethodWrapperType — так же, как функция класса превращается в метод. Для распознавания «любой подпрограммы» есть inspect.isroutine().
Примеры
import types
print(isinstance(int.__add__, types.WrapperDescriptorType)) # → True
print(isinstance((1).__add__, types.MethodWrapperType)) # → True
print(int.__add__(2, 3)) # → 5
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности