Grundsätzliche Frage OOP

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
addi
User
Beiträge: 28
Registriert: Donnerstag 29. März 2018, 22:54

Hey Leute, ich versuche mich gerade in OOP reinzuarbeiten. Naja dabei habe ich einige Fragen.

Die Klasse dient ja im Prizip als ein Bauplan für die Objekte. Als Beispiel:

Code: Alles auswählen

class Produkt:
    def __init__(self, name, preis, anzahl):
    	self.name = name
    	self.preis = preis
    	self.anzahl = anzahl
  
So mit dieser Klasse kann ich Objekte erstellen. Aber wie macht man das bei Problemen wo man zb. 100 Objekte erstellen möchte?

Mir ist ja klar wie ein Objekt erstellt, jedoch wie macht man das bei mehren Objekten? Mein Idee wäre es gewesen, eine Liste zu erstellen, wo ich die Objekte dann hinzufüge und dann über den Index die Objekte und ihre Eigenschaften aufrufe.

Code: Alles auswählen

for i in range(len(namensliste)):
    produktliste.append(Produkt(namensliste[i], preisliste[i], linkliste[i]))

produktliste[0].name
Benutzeravatar
__blackjack__
User
Beiträge: 13115
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@addi: ``for i in range(len(sequence)):`` nur um das `i` dann als Index in `sequence` zu verwenden ist in Python ein „anti pattern“. Man kann direkt über die Elemente von `sequence` iterieren, ohne den Umweg über einen Index. Falls man über mehrere ”parallele” Datenstrukturen iterieren muss, gibt es die `zip()`-Funktion. Allerdings sollten die Werte eigentlich gar nicht erst in solchen parallelen Listen existieren. Und bitte nicht den Namensbestandteil `*liste` verwenden. Wenn man Grunddatentypen in Namen verwendet, bekommt man Probleme wenn man den Datentyp ändern will. Dann hat man entweder falsche, irreführende Namen, oder man muss das ganze Programm durchgehen und überall die Namen anpassen.

Edit:

Code: Alles auswählen

class Product(object):

    def __init__(self, name, price, count):
        self.name = name
        self.price = price
        self.count = count


# ...

    products = [
        Product(name, price, count)
        for name, price, count in zip(names, prices, counts)
    ]
Aber wie gesagt ist es schon komisch/selten das die Werte aus drei separaten Listen kommen. Wahrscheinlicher wäre hier eine CSV-Datei oder eine Datenbankabfrage wo die jeweils drei zusammengehörenden Werte auch schon zusammen geliefert werden.
Zuletzt geändert von __blackjack__ am Samstag 4. August 2018, 16:33, insgesamt 1-mal geändert.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
addi
User
Beiträge: 28
Registriert: Donnerstag 29. März 2018, 22:54

Naja das letzere war einfach als Beispiel gedacht um zeigen was ich meine.

Gut danke. Werde ich in zukunft so umsetzen.

Edit: Das mag bestimmt sein (also wenn du es sagst, ist es wohl so), aber mir ging es darum, was wäre wenn. Also kann man das so machen. Danke.
Antworten