Использование isintsance()
обычно хорошо в __eq__()
методах.Вы не должны возвращать False
немедленно, если проверка isinstance()
не удалась, однако лучше вернуть NotImplemented
, чтобы дать other.__eq__()
шанс выполнения:
def __eq__(self, other):
if isinstance(other, Trout):
return self.x == other.x
return NotImplemented
Это будетстановятся особенно важными в иерархиях классов, где более чем один класс определяет __eq__()
:
class A(object):
def __init__(self, x):
self.x = x
def __eq__(self, other):
if isinstance(other, A):
return self.x == other.x
return NotImplemented
class B(A):
def __init__(self, x, y):
A.__init__(self, x)
self.y = y
def __eq__(self, other):
if isinstance(other, B):
return self.x, self.y == other.x, other.y
return NotImplemented
Если вы сразу же вернете False
, как в исходном коде, вы потеряете симметрию между A(3) == B(3, 4)
и B(3, 4) == A(3)
.