Rendre possible d'utiliser le jugement d'égalité auto-défini après avoir connu le mécanisme du jugement d'égalité d'objet en python
À propos du mécanisme de jugement avec ʻobj1 == obj2 et ʻobj1! = Obj2
python : 3.5.1, 2.7.10
class Foo(object):
def __init__(self, name, age):
self.name = name
self.age = age
Comme mentionné ci-dessus, après avoir défini la classe Foo, créez des instances de foo1 et foo2 comme indiqué ci-dessous. Si la même valeur est jugée ou si l'existence de la liste est jugée, elle sera True pour la même instance, mais si les valeurs des variables membres sont les mêmes mais que les instances sont différentes, ce sera False.
foo1 = Foo("foo", 24)
foo2 = Foo("foo", 24)
print(foo1 == foo1) # -> True
print(foo1 == foo2) # -> False
print(foo1 in [ foo1 ]) # -> True
print(foo1 in [ foo2 ]) # -> False
print(foo1 != foo1) # -> False
print(foo1 != foo2) #-> True
Lors du jugement de valeur égale avec ==
ou ʻobj in objlist de python, La méthode ʻObj .__ eq__
est appelée
D'autre part, ʻobj .__ ne__ est appelé pour
! = . Cependant, si ʻobj .__ eq__
est défini, dans 3.5.1 (les 3 systèmes?), ʻObj .__ ne__ renvoie le contraire, donc seul ʻobj .__ eq__
doit être remplacé.
Dans 2.7.10, si vous ne définissez pas aussi __ne__
, le résultat de ʻobj .__ ne__ ne retournera pas la valeur opposée de la valeur ʻobj .__ eq__
remplacée.
Si vous souhaitez unifier les 2e et 3e systèmes, il est recommandé de définir «ne».
Cependant, notez que dans le cas de __eq__
, vous devez d'abord appeler la méthode ʻisinstance (obj, CLASSNAME)qui détermine si la cible de comparaison est la même classe. Si les variables membres
name et ʻage
sont identiques, si elles sont considérées comme identiques, définissez comme suit
class Bar(object):
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, obj):
if isinstance(obj, Bar):
return self.name == obj.name and self.age == obj.age
else:
return False
def __ne__(self, obj):
return not self.__eq__(obj)
Si vous définissez la classe Bar comme ci-dessus, créez des instances de bar1, bar2, bar3 comme suit et voyez le résultat du jugement d'égalité, etc., ce sera comme suit
bar1 = Bar("bar", 24)
bar2 = Bar("bar", 24)
bar3 = Bar("foo", 24)
print(bar1 == bar1) # -> True
print(bar1 == bar2) # -> True
print(bar1 == bar3) # -> False
print(bar1 in [ bar1 ]) # -> True
print(bar2 in [ bar1 ]) # -> True
print(bar3 in [ bar1 ]) # -> False
print(bar1 != bar1) # -> False
print (bar1! = bar2) # -> False 2.7.10 sera Vrai si ne n'est pas défini print(bar1 != bar3) # -> True
Recommended Posts