Python Glossary English

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Сообщить о неточности