[Road to Intermediate Python] Aktiviert Vergleichsoperationen mit Originalklassen

Link zur Zusammenfassung

https://qiita.com/ganariya/items/fb3f38c2f4a35d1ee2e8

Einführung

Um Python zu studieren, habe ich eine Group Intelligence Library namens acopy kopiert.

In acopy werden viele interessante Python-Grammatiken und -Sprachen verwendet, und es wird zusammengefasst, dass es unter ihnen nützlich ist.

Dieses Mal können Vergleichsoperationen für die Instanzen der Klasse ausgeführt werden.

Vergleichsberechnung

Vergleichsoperationen werden für die in Python integrierten Datentypen definiert.

Zum Beispiel kann natürlich die Anzahl der Instanzen der int-Klasse sortiert und verglichen werden.

'''
[-2, -1, 1, 2, 3, 5]
'''
a = [1, 2, 3, 5, -1, -2]
a.sort()
print(a)

Wie oben erwähnt, können Sie sortieren und natürlich Operatoren wie "<=" verwenden.

Eigene Klasse

Sie können jedoch keine Vergleichsoperationen für Ihre eigene Klasse ausführen. Spezielle Attributmethode erforderlich, um eine Vergleichsoperation durchzuführen

Ist nicht definiert.

Daher können Sie Klasseninstanzen vergleichen und sortieren, indem Sie diese Attribute selbst definieren.

Versuchen Sie zu implementieren

import functools


@functools.total_ordering
class A:

    def __init__(self, x):
        self.x = x

    def __repr__(self):
        return f"x = {self.x}"

    def __eq__(self, other):
        return self.x == other.x

    def __lt__(self, other):
        return self.x < other.x


'''
[x = 2, x = 3, x = 10, x = 20]
'''
arr = [A(10), A(20), A(3), A(2)]
arr.sort()
print(arr)

In Klasse A ist das Attribut "repr" definiert, damit der Ausdruck besser lesbar ist.

Hier werden "eq" und "lt" definiert, die die Vergleichsbeziehung mit anderen Instanzen "other" darstellen. self.x <other.x von __lt__ gibt True zurück, wenn es kleiner als der Gegner ist und kein Austausch mehr erforderlich ist! Es ist ein Bild geworden.

Tatsächlich sind in der obigen Klasse nur __eq__ und __lt__ definiert, aber sie funktionieren gut. Dies liegt daran, dass der total_ordering-Dekorator von functools verwendet werden kann, um auf andere Vergleichsmethoden zu schließen.

Zusammenfassung

Es ist praktisch, Vergleichsoperationen direkt für die Klasse zum Sortieren und natürlich für if-Anweisungen auszuführen. Ich fand es praktisch, vergleichen zu können, indem ich nur "eq" und "lt" definierte. C ++ ist so nervig ...

Verweise

Recommended Posts

[Road to Intermediate Python] Aktiviert Vergleichsoperationen mit Originalklassen
Ein Weg zum mittleren Python
[Road to Intermediate] Grundlegendes zu Python-Eigenschaften
[Road to Intermediate Python] Rufen Sie eine Klasseninstanz wie eine Funktion mit __call__ auf
[Road to Intermediate Python] Verwenden Sie ternäre Operatoren
[Road to Intermediate Python] Verwenden Sie Lambda-Ausdrücke
Der Weg zum Kompilieren zu Python 3 mit Thrift
[Road to Intermediate Python] Zusammenfassung der Artikelverknüpfungen
[Road to Intermediate] Python scheint alles Objekte zu sein
[Road to Intermediate Python] Definieren Sie die Funktion __getattr__ in der Klasse
[Road to Intermediate Python] Definieren Sie in Ihrer eigenen Klasse
[Python] Weg zur Schlange (5) Spiele mit Matplotlib
Stellen Sie mit Python eine Verbindung zu BigQuery her
Stellen Sie mit Python eine Verbindung zu Wikipedia her
Post to Slack mit Python 3
[Road to Intermediate Python] Verwenden Sie die if-Anweisung in der Listeneinschlussnotation
Ich möchte automatisch an Online-Kursen mit Python + Selen teilnehmen!
Schalten Sie Python mit Alternativen auf 2.7 um
Schreiben Sie mit Python in csv
[Road to Intermediate Python] Geben Sie die Ausführungsmethode dynamisch anhand des Variablennamens an
Python: So verwenden Sie Async mit
Link, um mit Python zu beginnen
[Python] Mit Python in eine CSV-Datei schreiben
Schön dich mit Python zu treffen
Versuchen Sie, Facebook mit Python zu betreiben
Ausgabe in eine CSV-Datei mit Python
Konvertieren Sie die Liste mit Python in DataFrame
MP3 → WAV-Konvertierung mit Python
[Python] Weg zur Serpent (3) Python-Klasse
Schwanzrekursion mit Python2 durchführen
Weg zu Intermediate Linux: Network Edition
Was tun mit PYTHON Release?
So berechnen Sie das Datum mit Python
Mit Python 3 einfach auf Twitter posten
Ich möchte mit Python debuggen
Automatisieren Sie Tastatur- und Mausoperationen mit Python, um die tägliche Arbeit zu optimieren [RPA]
Versuchen Sie, sich mit Python bei qiita anzumelden
Ändern Sie die Python 64-Bit-Umgebung mit Anaconda in eine 32-Bit-Umgebung
Englische Spracherkennung mit Python [Rede zu Text]
Konvertieren Sie Memos sofort mit Python 2to3
HTML-Mail mit Bild zum Senden mit Python
Memo, um nach KPI mit Python zu fragen
Python nur mit Hallo, Welten zu erinnern
Geben Sie Farbzeichen mit Python zu hübsch aus
Binden Sie Methoden an Python-Klassen und -Instanzen
Einführung in das Auffüllen von Python-Bildern Auffüllen von Bildern mit ImageDataGenerator
Konvertieren Sie Excel-Daten mit Python in JSON
[Python] Straße zu Schlangen (1) Umgebungskonstruktion
Konvertiere Hiragana mit Python (Beta) in Romaji
Fraktal zum Erstellen und Spielen mit Python
Ich wollte ABC160 mit Python lösen
Stellen Sie mit Python in Docker eine Verbindung zu MySQL her
So arbeiten Sie mit BigQuery in Python
Trump-Klasse in Python (mit Vergleich)
[Einführung in Python] Verwenden wir foreach mit Python
Einzelpixel-Kamera zum Erleben mit Python