Generelles Vorgehen beim Programmieren

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.
schnickalot
User
Beiträge: 22
Registriert: Dienstag 13. August 2019, 14:38

sorry muss noch mal fragen.. wie genau muss die from_dict() aussehen? Könnt Ihr mir den code mal bitte vorschreiben? Ich steh völlig auf dem Schlauch..
Sirius3
User
Beiträge: 18255
Registriert: Sonntag 21. Oktober 2012, 17:20

Du bekommst ein Wörterbuch und übergibst die Werte an die Klasse. Im einfachsten Fall so:

Code: Alles auswählen

class Player:
    def __init__(self, first_name, last_name, team, games_won=0, games_lost=0, ...):
        ....

    @classmethod
    def from_dict(cls, entry):
        return cls(**entry)
Du hast aber nicht den einfachsten Fall, denn die Auflösung von Teamname nach Team muß auch noch in `from_dict` stattfinden:

Code: Alles auswählen

    @classmethod
    def from_dict(cls, entry, teams):
        entry = dict(entry)
        team_name = entry.pop('team_name')
        return cls(team=teams[team_name], **entry)
schnickalot
User
Beiträge: 22
Registriert: Dienstag 13. August 2019, 14:38

danke.. ich glaub ich versteh nicht wie genau das dict aussieht, weches ich speichere und lade. So wie ich es verstehe habe ich ein Dict mit nur einem Key "players" und als wert wiederum ein Dict, mit den keys first_name. last_name etc und den dazugehörigen Werten.

Visuell mal so dargestellt:

Code: Alles auswählen

"players": "first_name": "Peter",
           "last_name": "Schmidt"
           "team": "BC Buxtehude"
           usw.
Woran ich die ganze Zeit knabber.. so könnte man ja nur einen Player speichern, weil ja in einem Dict nicht 2x der gleiche Key vorhanden sein darf. Also kann es ja keinen 2. Key first_name, last_name etc geben, um die Daten weiterer Spieler zu speichern.

Wo ist denn mein Denkfehler?
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das dir eine Liste um die Objekte (so nennt JSON dicts) fehlt. Oder players ist wieder ein dict, und die Schluessel sind die Namen.
schnickalot
User
Beiträge: 22
Registriert: Dienstag 13. August 2019, 14:38

meinst du das?

data = {
"players": [player.to_dict() for player in self._players.values()]
}

wie sehen denn die Inhalte der ListComprehensive aus? Wahrscheinlich nicht so wie ich es oben dargestellt habe?!
Benutzeravatar
__blackjack__
User
Beiträge: 14013
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich hatte die Player-JSON-Objekte in ein JSON-Array gesteckt, weil der Name sonst ja redundant gespeichert würde.

Wie ein einzelner Player da aussieht bestimmt die `to_dict()`-Methode von `Player`, denn die wird ja für jedes Element in der „list comprehension“ (LC) aufgerufen.

Ansonsten kann man ja auch einfach mal in die gespeicherte JSON-Datei rein schauen wenn man sich das nicht vorstellen kann.
“The best book on programming for the layman is »Alice in Wonderland«; but that's because it's the best book on anything for the layman.” — Alan J. Perlis
schnickalot
User
Beiträge: 22
Registriert: Dienstag 13. August 2019, 14:38

Ja das ist richtig mir fehlt die Praxis.. bin nur gerade dabei meinen fertigen Anfänger code umzuschreiben. Schwer da was laufbares zu haben. Wollte erstmal die Klassen sauber haben bevor ich die GUI Klassen 3x ändern muss. Ich bau mir heut Abend mal ne Testumgebung auf und schau mir es mal in Detail am. Danke erstmal für die Infos
schnickalot
User
Beiträge: 22
Registriert: Dienstag 13. August 2019, 14:38

nur mal kurz Rückmeldung.. wenn man sieht was rauskommt, ist dann doch alles klarer. Danke nochmal an alle!
Antworten