2
のPython-3.5.1 \ typeobject.c私の見解でslot_nb_bool(__bool__のスロット機能)はどのように__len__を呼び出すことができますか?オブジェクト
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;
}
...
、スロット関数は次のように__bool__はPythonソースに定義されている場合にのみ使用されている:
def __bool__(self):
return True
func = lookup_maybe(self, &PyId___bool__);
場合NULLを返した場合は、__bool__
が定義されていないことを示します。スロットはslot_nb_boolで埋められません。 slot_nb_boolは呼び出されません。
slot_nb_bool(__bool__
のスロット機能)はどのようにして__len__
とコールできますか?
boolが定義されていない場合、nb_boolはNULLにする必要があります。slot_nb_boolは呼び出されません。 – Vince