Python Glossary English

все Python 3typesпонятие

types.MemberDescriptorType

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

Тип атрибута-слота: его создаёт __slots__ в вашем классе, и он же описывает поля структур на C, например timedelta.days.

Синтаксис

isinstance(obj, types.MemberDescriptorType)

Каждое имя из __slots__ превращается в MemberDescriptorType в __dict__ класса — именно он хранит значение в фиксированной ячейке экземпляра вместо словаря. Отсюда ловушка: пока атрибут не присвоен, чтение даёт AttributeError, хотя имя «объявлено». И ещё одна: класс со __slots__ без '__weakref__' не поддерживает слабые ссылки.

Примеры

import types
class Point:
    __slots__ = ('x', 'y')
print(isinstance(Point.__dict__['x'], types.MemberDescriptorType))  # → True
p = Point()
try:
    p.x
except AttributeError:
    print('AttributeError')  # → AttributeError

См. также

Частые ошибки

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