Generieren Sie eine erstklassige Sammlung in Python

Einführung

Beim Studium der Objektorientierung habe ich oft "Die Logik, die mehrere Objekte desselben Typs verarbeitet, wird in einer erstklassigen Sammlung zusammengefasst." Sie werden solche Sätze sehen. Bis jetzt wusste ich nicht, wie ich es in Python schreiben sollte. Ich habe einen Artikel geschrieben, weil ich auf meine eigene Weise schreiben konnte: "Wenn Sie dies schreiben, wird es leichter zu verstehen sein."

Ich werde es vorerst schreiben

Betrachten Sie eine Produktklasse und ihre erstklassige Sammlung (im Folgenden als Sammlung bezeichnet).

import dataclasses
from typing import List

@dataclasses.dataclass(frozen=True)
class Item(object):
    name: str
    price: int

@dataclasses.dataclass(frozen=True)
class ItemCollection(object):
    # default_Sie können angeben, welcher Typ werkseitig initialisiert werden soll
    items: List[Item] = dataclasses.field(default_factory=list)

    def add_item(self, item):
        #Beim Hinzufügen eines Elements wird ein neues Objekt erstellt und zurückgegeben.
        #So erstellen Sie ein neues Objekt mit hinzugefügten Elementen ohne Nebenwirkungen auf eine vorhandene Sammlung
        #Mir fiel nichts anderes ein ...
        return ItemCollection(self.items + [item])

Bitte lesen Sie hier für die grundlegende Verwendung von Datenklassen ... (https://qiita.com/madogiwa_429/items/55c78fc6be7887a28df8)

Damit können Sie vorerst eine erstklassige Sammlung erstellen.

Zweifel an der erstklassigen Sammlung

Der Grund, warum ich es für die Sammlung als unpraktisch empfand Es gab einen Kommentar, dass "eine Beschreibung der Verarbeitung, die leicht zu schreiben sein sollte, problematisch wird". Wenn Sie in diesem Beispiel beispielsweise den Gesamtpreis der in der Sammlung gespeicherten Produkte ermitteln möchten, Wie soll ich es schreiben? Wenn Sie es mit dem Typ int in die Liste aufnehmen, können Sie es mit der Summenfunktion schreiben. Durch das Speichern der Item-Klasse wird es unmöglich, sie kurz zu beschreiben. Aus diesem Grund wusste ich nicht, ob es wirklich gut ist, im Umgang mit Arrays objektorientiert zu schreiben.

Verwenden Sie die Kartenfunktion

Die Kartenfunktion bietet eine bestimmte Lösung für diesen Zweifel. Die Kartenfunktion behandelt jedes Element eines iterierbaren Objekts, z. B. eine Liste. Mit der Kartenfunktion kann die Methode zur Berechnung des Gesamtpreises der in der Sammlung gespeicherten Produkte wie folgt geschrieben werden.

@dataclasses.dataclass(frozen=True)
class ItemCollection(object):
    items: List[Item] = dataclasses.field(default_factory=list)

    def add_item(self, item):
        return ItemCollection(self.items + [item])

    def sum_price(self):
        #Instanzvariablen für jedes Element von Elementen"price"Kann nur die Werte von auflisten
        price_list = list(map(lambda item: item.price, self.items))
        return sum(price_list)        

Zusammenfassung

Mit der Kartenfunktion konnte ich die Methode der erstklassigen Sammlung präzise schreiben. Ich hoffe, es ist hilfreich für diejenigen, die die gleichen Probleme haben, wenn sie objektorientiert in Python schreiben.

Apropos ...

Durch Setzen von eingefroren = True kann eine Neuzuweisung von Instanzvariablen verhindert werden. Ich konnte das Hinzufügen von Listenelementen nicht verhindern ...

test = ItemCollection()

#Dieser Vorgang führt zu einem Fehler
test.items = ['Tesuto']

#Dieser Vorgang führt nicht zu einem Fehler und es werden Elemente hinzugefügt
test.items.append('Tesuto')

Recommended Posts

Generieren Sie eine erstklassige Sammlung in Python
Generieren Sie eine Klasse aus einer Zeichenfolge in Python
Fallklasse in Python
Klassennotation in Python
Ich habe eine Klasse in Python3 und Java geschrieben
Machen Sie einen Screenshot in Python
Erstellen Sie mit Selenium einen Datenerfassungsbot in Python
Generieren Sie in Python ein abgerundetes Miniaturbild
Erstellen Sie eine Funktion in Python
Erstellen Sie ein Wörterbuch in Python
Eine Code-Sammlung, die häufig in persönlichem Python verwendet wird
Generieren Sie eine U-Verteilung in Python
Erstellen Sie ein Lesezeichen in Python
Generieren Sie QR-Code in Python
Bildverarbeitungssammlung in Python
Zeichne ein Herz in Python
Generieren Sie 8 * 8 (64) Cubes mit Blender Python
Verwendung der Methode __call__ in der Python-Klasse
Entwickelte eine Bibliothek, um die Kindle-Sammlungsliste in Python abzurufen
[MQTT / Python] Implementierte eine Klasse, die Pub / Sub von MQTT in Python ausführt
Ich habe eine Klasse in Python erstellt und versucht, Enten zu tippen
Wahrscheinlich in einer Nishiki-Schlange (Originaltitel: Vielleicht in Python)
Schreiben Sie eine Dichotomie in Python
[Python] Verwalten Sie Funktionen in einer Liste
Erste einfache Regressionsanalyse in Python
Drücken Sie einen Befehl in Python (Windows)
[Python] Generiert QR-Code im Speicher
Scala-ähnliche Erfassungsoperation in Python
In Python-Klassenvariablen versteckte Landminen
Erstellen Sie einen DI-Container mit Python
Zeichnen Sie eine Streudiagrammmatrix mit Python
ABC166 in Python A ~ C Problem
Generieren Sie das Jupyter-Notizbuch ".ipynb" in Python
Schreiben Sie A * (A-Stern) -Algorithmen in Python
Lesen Sie PNG-Chunks in Python (Klassenausgabe)
Erstellen Sie eine Binärdatei in Python
Löse ABC036 A ~ C mit Python
Schreiben Sie ein Kreisdiagramm in Python
Schreiben Sie das Vim-Plugin in Python
Schreiben Sie eine Suche mit Tiefenpriorität in Python
[Python] Generiere ein Passwort mit Slackbot
Implementierung eines einfachen Algorithmus in Python 2
Untersuchen Sie die Klasse eines Objekts mit Python
Löse ABC037 A ~ C mit Python
Führen Sie einen einfachen Algorithmus in Python aus
Zeichnen Sie ein CNN-Diagramm in Python
Erstellen Sie eine zufällige Zeichenfolge in Python
[Python] Erbt eine Klasse mit Klassenvariablen
Generieren Sie das Display-Abzeichen für die Download-Anzahl der Python-Bibliotheken
Der erste Schritt von Python Matplotlib
Beim Schreiben eines Programms in Python
Erstellen Sie eine Instanz einer vordefinierten Klasse aus einer Zeichenfolge in Python
Eine Klasse, die häufig verwendete Methoden in Twitter API (Python) zusammenfasst.
Spiralbuch in Python! Python mit einem Spiralbuch! (Kapitel 14 ~)
Erstellen Sie mit Class einen Python-Funktionsdekorator
[Einführung in Python] Wie verwende ich eine Klasse in Python?
Löse ABC175 A, B, C mit Python