Что это за особые предметы, найденные в объекте, похожем на диктовку, которые были возвращены методом __prepare__
?
>>> class A(object):
... print(locals())
...
{'__module__': '__main__', '__qualname__': 'A'}
>>> class A(object):
... """123"""
... print(locals())
...
{'__module__': '__main__', '__qualname__': 'A', '__doc__': '123'}
Есть ли какие-либо другие «специальные» элементы, помещенные в оператор класса locals()
, кроме __module__
, __qualname__
и __doc__
? Можно ли предотвратить / изменить такое поведение с помощью оператора класса ? Имеет ли смысл менять их внутри оператора класса или нет? Можно ли изменить другие атрибуты класса (например, __name__
) внутри оператора класса? Как выглядит аргумент-функция exec_body
из types.new_class
, чтобы полностью эмулировать создание операторов класса?
что это за специальные элементы, найденные в cls.__dict__
после cls
создания?
>>> class A(object): pass
>>> class B(A): pass
>>> class C(object): __slots__ = ()
>>> print(A.__dict__, B.__dict__, C.__dict__, sep='\n')
{'__module__': '__main__', '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None}
{'__module__': '__main__', '__doc__': None}
{'__module__': '__main__', '__slots__': (), '__doc__': None}
Есть ли какие-либо другие «специальные» предметы, помещенные в cls.__dict__
, кроме __module__
, __dict__
, __weakref__
, __doc__
, __slots__
? В каких случаях они появляются?
как создаются специальные элементы оператора класса locals()
, специальные элементы в cls.__dict__
и другие специальные атрибуты класса (например, __class__
, __bases__
, __base__
, __mro__
, __name__
, __qualname__
) взаимодействуют друг с другом? Есть ли такие взаимодействия?