Handling von Klasseninternen Daten

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
Zwangsgestörter
User
Beiträge: 20
Registriert: Freitag 23. Oktober 2020, 19:00

Hallo zusammen,

ich hab mal ne Frage. Wie handhabt ihr dsa eigentlich mit Klasseninternen Daten.

Code: Alles auswählen

class foo:
    def __init__(self):
    self.bar = "hello"
    self.foobar = {"dynamic created": "data"}
	
    def do_stuff(self):
        self.another_thing = 42
Das ist jetzt mal ein einfaches Besipiel.

Mir geht es um die klasseninternen Daten die mit self. angespochen werden. Bei meinem Code und den von anderen fällt mir immer wieder auf das es schnell sehr undurchsichtig wird welche Daten jetzt überhaupt in der Klasse vorhanden sind. Besonders bei der Verwendung von Dicts ist es echt schnell echt schwer zu erkennen, was da jetzt drin ist und was da rein gehört.

Wie handhabt ihr das denn um das Übersichtlicher zu geschalten?

Ich habe jetzt mal einen klassischen Ansatz versucht, wie man es aus anderen Sprachen so kennt.

Code: Alles auswählen

class foo:
    bar : str
    foobar : dict[str,str]
    another_thing: int

    def __init__(self):
        self.bar = "hello"
        self.foobar = {"dynamic created": "data"}
		
     u.s.w.	
Das fühlt sich aber nicht nach Python an.

Grüße
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Wenn es unübersichtlich wird hast du wahrscheinlich zu viele Attribute in einer Klasse. An der Stelle wäre dann zu überlegen ob man Teile davon nicht in separate Klassen auslagern kann.
Zwangsgestörter
User
Beiträge: 20
Registriert: Freitag 23. Oktober 2020, 19:00

Gerade bei PyQT Fensterklassen kommt immer mal wieder was zusammen, was sich nicht so einfach aufteilen lässt.
Benutzeravatar
sparrow
User
Beiträge: 4164
Registriert: Freitag 17. April 2009, 10:28

@Zwangsgestörter: Die Unübersichtlichkeit baust du dir selbst. Wenn du "dynamic created" als Bezeichnung für den Inhalt eines dicts verwendest, lässt das Schlimmes vermuten. Lege nur das als Instanzvariablen an, was die Instanz auch wirklich benötigt. Und ein dict zu verwenden um dynamisch Variablen zu setzen ist zwar möglich aber in der Regel nicht nötig. Und Variablen werden nicht in Methoden an .self gebunden, wenn sie nicht in __init__ stehen. Macht ja auch keinen Sinn. Offensichtlich sind sie für die Klasse gar nciht nötig, wenn sie bei __init__ noch nicht angelegt wird.
Antworten