Python Glossary English

Python 3.7+typesпонятие

types.ClassMethodDescriptorType

дескрипторы и обёртки C

Тип «сырого» метода класса у встроенного класса на C, например dict.__dict__['fromkeys']. Аналог classmethod для кода на C.

Синтаксис

isinstance(obj, types.ClassMethodDescriptorType)

Увидеть этот тип можно только заглянув в __dict__ класса: обращение dict.fromkeys уже запускает дескриптор и возвращает связанный с классом BuiltinFunctionType. Та же разница есть у Python-классов: в __dict__ лежит объект classmethod, а атрибут через точку — связанный метод. Поэтому код, обходящий vars(cls) в поисках методов, видит иные типы, чем getattr(cls, name).

Примеры

import types
raw = dict.__dict__['fromkeys']
print(isinstance(raw, types.ClassMethodDescriptorType))  # → True
print(isinstance(dict.fromkeys, types.BuiltinFunctionType))  # → True
print(dict.fromkeys('ab', 0))  # → {'a': 0, 'b': 0}

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности