Python 3.7+typesпонятие
types.MethodDescriptorType
дескрипторы и обёртки C
Тип обычного метода встроенного класса, взятого у класса: str.join, list.append. При вызове через класс первый аргумент — экземпляр.
Синтаксис
isinstance(obj, types.MethodDescriptorType)
str.join — это MethodDescriptorType, а ', '.join — уже BuiltinFunctionType (связанный метод на C). Отсюда удобный приём: str.upper можно передать в map как функцию от одного аргумента — map(str.upper, words). Но это работает только для строк: str.upper(5) даст TypeError, потому что дескриптор проверяет тип self, в отличие от функций, написанных на Python.
Примеры
import types
print(isinstance(str.upper, types.MethodDescriptorType)) # → True
print(isinstance('a'.upper, types.BuiltinFunctionType)) # → True
print(list(map(str.upper, ['ok', 'go']))) # → ['OK', 'GO']
try:
str.upper(5)
except TypeError:
print('TypeError') # → TypeError
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности