#cpython #python-internals
#cpython #python-внутренние компоненты
Вопрос:
По умолчанию nb_bool
слот для объекта типа Python не должен существовать. В противном случае, если значение по умолчанию slot_nb_bool
существует, при вызове оно вызовет бесконечную рекурсию, когда __len__
будет определено.
Если да, то что происходит nb_bool
в следующем сценарии?
class A:
pass
A.__bool__ = lambda x: 0
assert not A()
Тип object не имеет дескриптора, установленного для __bool__
, и metaclass __setattr__
, похоже, не обрабатывает его в соответствии с исходным кодом CPython.
Ответ №1:
type
‘s tp_setattro
slot ( __setattr__
) действительно справляется с этим.
После установки атрибута для класса type_setattro
вызывается.
Он проверяет, является ли атрибут методом Дандера. Если это так, то он обновляет соответствующий слот.