Python-3.5.1 \ Objekte \ typeobject.cWie kann slot_nb_bool (Slot-Funktion für __bool__) __len__ aufrufen?
UNSLOT("__bool__", nb_bool, slot_nb_bool, wrap_inquirypred,
"self != 0"),
static int
slot_nb_bool(PyObject *self)
{
PyObject *func, *args;
int result = -1;
int using_len = 0;
_Py_IDENTIFIER(__bool__);
func = lookup_maybe(self, &PyId___bool__);
if (func == NULL) {
if (PyErr_Occurred())
return -1;
func = lookup_maybe(self, &PyId___len__);
if (func == NULL)
return PyErr_Occurred() ? -1 : 1;
using_len = 1;
}
...
In meiner Ansicht ist Schlitzfunktion nur dann verwendet, wenn __bool__ in Python Quelle ist wie folgt definiert:
def __bool__(self):
return True
wenn func = lookup_maybe(self, &PyId___bool__);
Rückgabe NULL, es zeigt an, dass __bool__
definiert ist. Der Slot wird dann nicht mit slot_nb_bool gefüllt. slot_nb_bool wird nicht aufgerufen.
Wie kann slot_nb_bool (Steckplatzfunktion für __bool__
) __len__
aufrufen?
Wenn bool nicht definiert ist, sollte nb_bool NULL sein, slot_nb_bool wird nicht aufgerufen. – Vince