This rule raises an issue when operators ``++in++`` and ``++not in++`` are called with a right operand not supporting membership protocol. == Why is this an issue? Operators ``++in++`` and ``++not in++``, also called https://docs.python.org/3/reference/expressions.html#membership-test-operations["membership test operators"], require that the right operand supports the membership protocol. In order to support the membership protocol, a user-defined class should implement at least one of the following methods: ``++__contains__++``, ``++__iter__++``, ``++__getitem__++``. If none of these methods is implemented, a `TypeError` will be raised when performing a membership test. == How to fix it == Code examples === Noncompliant code example [source,python] ---- myint = 42 if 42 in myint: # Noncompliant: integers don't support membership protocol ... class A: def __init__(self, values): self._values = values if "mystring" in A(["mystring"]): # Noncompliant: class A doesn't support membership protocol ... ---- === Compliant solution [source,python] ---- mylist = [42] if 42 in mylist: ... class MyContains: def __init__(self, values): self._values = values def __contains__(self, value): return value in self._values if "mystring" in MyContains(["mystring"]): ... # OR class MyIterable: def __init__(self, values): self._values = values def __iter__(self): return iter(self._values) if "mystring" in MyIterable(["mystring"]): ... # OR class MyGetItem: def __init__(self, values): self._values = values def __getitem__(self, key): return self._values[key] if "mystring" in MyGetItem(["mystring"]): ... ---- == Resources === Documentation * Python Documentation - https://docs.python.org/3/reference/expressions.html#membership-test-operations[Membership test operations] ifdef::env-github,rspecator-view[] ''' == Implementation Specification (visible only on this page) === Message Change the type of X; type Y does not support membership protocol. For an expression like "a in X" where X has type Y === Highlighting Primary: The "in" or "not in" operator Secondary: The operator's right operand endif::env-github,rspecator-view[]