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