Objektäquivalenzbeurteilung in Python

Zweck

Ermöglichen Sie die Verwendung eines selbst definierten Gleichheitsurteils, nachdem Sie den Mechanismus des Objektgleichheitsurteils in Python kennen Über den Beurteilungsmechanismus mit obj1 == obj2 und obj1! = Obj2

Umgebung

python : 3.5.1, 2.7.10

Äquivalenzbeurteilung mit eingebauter Python-Funktion

class Foo(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

Wie oben erwähnt, erstellen Sie nach dem Definieren der Foo-Klasse Instanzen von foo1 und foo2 wie unten gezeigt. Wenn derselbe Wert beurteilt wird oder die Existenz der Liste beurteilt wird, wird sie in derselben Instanz wahr, aber sie wird falsch, wenn der Wert der Mitgliedsvariablen gleich ist, die Instanz jedoch unterschiedlich ist.

  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

Wenn du deine eigenen machst

Wenn Sie eine gleichwertige Beurteilung mit "==" oder "obj in objlist" von Python durchführen, Die Methode obj .__ eq__ wird aufgerufen Andererseits wird "obj .__ ne__" für "! =" Gerufen Wenn Sie jedoch in 3.5.1 (alle 3 Serien?) Obj .__ eq__ definieren, gibt obj .__ ne__ das Gegenteil zurück, sodass Sie nur obj .__ eq__ überschreiben müssen. Wenn Sie in 2.7.10 nicht auch "ne" definieren, gibt das Ergebnis von "obj .__ ne__" nicht den entgegengesetzten Wert des überschriebenen "obj .__ eq__" zurück. Wenn Sie das 2. und 3. System vereinheitlichen möchten, wird empfohlen, "ne" zu definieren.

Beachten Sie jedoch, dass Sie im Fall von eq zuerst die Methode isinstance (obj, CLASSNAME) aufrufen müssen, die bestimmt, ob das Vergleichsziel dieselbe Klasse ist. Wenn die Mitgliedsvariablen "Name" und "Alter" gleich sind und als gleich angesehen werden, definieren Sie Folgendes.

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 (wahrscheinlich alle 2.7-Serien) erfordert auch Folgendes

    def __ne__(self, obj):
        return not self.__eq__(obj)

Wenn Sie die Bar-Klasse wie oben definieren, erstellen Sie Instanzen von bar1, bar2 und bar3 wie folgt und sehen Sie die Ergebnisse der Gleichheitsbeurteilung usw. wie folgt.

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 ist True, wenn ne nicht definiert ist print(bar1 != bar3) # -> True

Recommended Posts

Objektäquivalenzbeurteilung in Python
Implementierung der schnellen Sortierung in Python
Bildpixel-Manipulation in Python
Zeitdelta in Python 2.7-Serie teilen
MySQL-automatische Escape-Funktion von Parametern in Python
Umgang mit JSON-Dateien in Python
Zuweisungen und Änderungen in Python-Objekten
Implementierung eines Lebensspiels in Python
Audio-Wellenform-Anzeige in Python
6 Möglichkeiten zum Stringen von Objekten in Python
Untersuchen Sie die Klasse eines Objekts mit Python
Das Gesetz der Zahlen in Python
Implementierung der ursprünglichen Sortierung in Python
Reversibles Verwürfeln von Ganzzahlen in Python
Quadtree in Python --2
Python in der Optimierung
CURL in Python
Konvertierung der Zeichenfolge <-> Datum (Datum, Datum / Uhrzeit) in Python
Geokodierung in Python
SendKeys in Python
Überprüfen Sie das Verhalten des Zerstörers in Python
Übung, dies in Python zu verwenden (schlecht)
Metaanalyse in Python
Unittest in Python
Ausgabebaumstruktur von Dateien in Python
Zeigen Sie eine Liste der Alphabete in Python 3 an
Vergleich japanischer Konvertierungsmodule in Python3
Zusammenfassung verschiedener for-Anweisungen in Python
Epoche in Python
Zwietracht in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
N-Gramm in Python
Python-Grundlagen ①
Das Ergebnis der Installation von Python auf Anaconda
Grundlagen von Python ①
Programmieren mit Python
Gang of Four (GoF) -Muster in Python
Plink in Python
Konstante in Python
Kopie von Python
Grundlagen zum Ausführen von NoxPlayer in Python
FizzBuzz in Python
Massenersatz von Zeichenfolgen in Python-Arrays
Projekt Euler # 16 "Summe der Kräfte" in Python
SQLite in Python
Schritt AIC in Python
Traffic Safety-Kun: Erkennung von Verkehrszeichen in Python
Zusammenfassung der integrierten Methoden usw. der Python-Liste
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Nicht logische Operatorverwendung von oder in Python
Auf der Suche nach dem schnellsten FizzBuzz in Python
Konstante in Python