Seite 3 von 3

Re: Generelles Vorgehen beim Programmieren

Verfasst: Montag 19. August 2019, 00:13
von schnickalot
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..

Re: Generelles Vorgehen beim Programmieren

Verfasst: Montag 19. August 2019, 06:14
von Sirius3
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)

Re: Generelles Vorgehen beim Programmieren

Verfasst: Montag 19. August 2019, 11:53
von schnickalot
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?

Re: Generelles Vorgehen beim Programmieren

Verfasst: Montag 19. August 2019, 12:03
von __deets__
Das dir eine Liste um die Objekte (so nennt JSON dicts) fehlt. Oder players ist wieder ein dict, und die Schluessel sind die Namen.

Re: Generelles Vorgehen beim Programmieren

Verfasst: Montag 19. August 2019, 12:29
von schnickalot
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?!

Re: Generelles Vorgehen beim Programmieren

Verfasst: Montag 19. August 2019, 12:39
von __blackjack__
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.

Re: Generelles Vorgehen beim Programmieren

Verfasst: Montag 19. August 2019, 12:59
von schnickalot
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

Re: Generelles Vorgehen beim Programmieren

Verfasst: Freitag 23. August 2019, 15:33
von schnickalot
nur mal kurz Rückmeldung.. wenn man sieht was rauskommt, ist dann doch alles klarer. Danke nochmal an alle!