Нет отдельного крючка "notcontains". in
и not in
нельзя переопределить отдельно.
Существуют отдельные хуки __eq__
и __ne__
, поскольку ==
и !=
могут не возвращать логические значения. Например, вы не можете реализовать !=
для массивов NumPy как not (x == y)
. У not in
такой проблемы нет, потому что и in
, и not in
должны возвращать логические значения.
Если вы посмотрите документацию для модели данных , вы увидите, что онадокументирует только один __contains__
хук для in
и not in
. Вы также можете взглянуть на реализацию , в которой in
и not in
вызывают одну и ту же функцию API PySequence_Contains
C, а затем not in
применяет !
к результату:
case PyCmp_IN:
res = PySequence_Contains(w, v);
if (res < 0)
return NULL;
break;
case PyCmp_NOT_IN:
res = PySequence_Contains(w, v);
if (res < 0)
return NULL;
res = !res;
break;