Jugement d'équivalence d'objet en Python

Objectif

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

environnement

python : 3.5.1, 2.7.10

Jugement d'équivalence avec fonction intégrée de python

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

Si tu fais le vôtre

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 membresname 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

2.7.10 (probablement toutes les séries 2.7) nécessite également les éléments suivants

    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

Jugement d'équivalence d'objet en Python
Implémentation du tri rapide en Python
Manipulation des pixels d'image en Python
Diviser timedelta dans la série Python 2.7
Échappement automatique des paramètres MySQL en python
Gestion des fichiers JSON en Python
Affectations et modifications des objets Python
Implémentation du jeu de vie en Python
Affichage de la forme d'onde audio en Python
6 façons d'enchaîner des objets en Python
Examiner la classe d'un objet avec python
La loi des nombres en python
Implémentation du tri original en Python
Brouillage réversible d'entiers en Python
Quadtree en Python --2
Python en optimisation
CURL en Python
Conversion de la chaîne <-> date (date, datetime) en Python
Géocodage en python
SendKeys en Python
Vérifiez le comportement du destroyer en Python
Pratique d'utilisation de ceci en Python (mauvais)
Méta-analyse en Python
Unittest en Python
Arborescence de sortie des fichiers en Python
Afficher une liste d'alphabets en Python 3
Comparaison des modules de conversion japonais en Python3
Résumé de diverses instructions for en Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
nCr en python
N-Gram en Python
Les bases de Python ①
Le résultat de l'installation de python sur Anaconda
Bases de python ①
Programmation avec Python
Modèles Gang of Four (GoF) en Python
Plink en Python
Constante en Python
Copie de python
Principes de base pour exécuter NoxPlayer en Python
FizzBuzz en Python
Remplacement en bloc des chaînes dans les tableaux Python
Projet Euler # 16 "Somme des pouvoirs" en Python
Sqlite en Python
Étape AIC en Python
Traffic Safety-kun: Reconnaissance des panneaux de signalisation en Python
Résumé des méthodes intégrées, etc. de la liste Python
LINE-Bot [0] en Python
CSV en Python
Assemblage inversé avec Python
Réflexion en Python
Utilisation d'opérateurs non logiques de ou en python
À la recherche du FizzBuzz le plus rapide en Python
Constante en Python