Seite 1 von 1

Handling von Klasseninternen Daten

Verfasst: Donnerstag 16. September 2021, 14:33
von Zwangsgestörter
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

Re: Handling von Klasseninternen Daten

Verfasst: Donnerstag 16. September 2021, 14:38
von DasIch
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.

Re: Handling von Klasseninternen Daten

Verfasst: Donnerstag 16. September 2021, 16:22
von Zwangsgestörter
Gerade bei PyQT Fensterklassen kommt immer mal wieder was zusammen, was sich nicht so einfach aufteilen lässt.

Re: Handling von Klasseninternen Daten

Verfasst: Donnerstag 16. September 2021, 17:39
von sparrow
@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.