Seite 1 von 1
dataclass: Attribut soll Instanz einer anderen Klasse sein
Verfasst: Sonntag 17. April 2022, 13:28
von SinaS
Hallo zusammen,
wahrscheinlich simple Frage: Ich habe zwei Klassen: A und B, beides sind dataclasses.
Im "Konstruktor" der dataclass A möchte ich nun, dass für das Attribut
beispiel nur Instanzen der Klasse B eingegeben werden können sind. Ich dachte, das ginge so:
Meine IDE zeigt mir dann aber den Fehler "name B " is not defined. Wo sind meine Denkfehler?
Danke!!
VG
SinaS
Re: dataclass: Attribut soll Instanz einer anderen Klasse sein
Verfasst: Sonntag 17. April 2022, 13:29
von __deets__
Ich sehe auch keine Definition von B. Also stimmt die Meldung doch.
Re: dataclass: Attribut soll Instanz einer anderen Klasse sein
Verfasst: Sonntag 17. April 2022, 13:36
von SinaS
Hallo __deet__,
danke, das war der wichtige Hinweis. Natürlich muss die Definition von B oberhalb des Codes von A erfolgen. In meinem Code war die Definition unterhalb. Da war er, mein Denkfehler.
VG
SinaS
Re: dataclass: Attribut soll Instanz einer anderen Klasse sein
Verfasst: Sonntag 17. April 2022, 13:39
von narpfel
Wenn `B` nicht vor `A` definiert werden kann und/oder man zirkuläre Abhängigkeiten hat, gibt es
https://peps.python.org/pep-0563/
Re: dataclass: Attribut soll Instanz einer anderen Klasse sein
Verfasst: Sonntag 17. April 2022, 22:33
von __blackjack__
@SinaS: Dein erster Beitrag klingt so als würdest Du glauben man könnte da nur Objekte von Typ `B` zuweisen. Das stimmt aber nicht. Typannotationen haben zur Laufzeit keinerlei Wirkung, man kann da weiterhin Werte von jedem beliebigen Typ zuweisen. Die Annotationen dienen nur der Dokumentation und können von statischen Typprüfungen ausgewertet werden. Letzteres sollte man auch dringend tun, wenn man Typannotationen schreibt, weil es sonst sehr schnell passieren kann, das man fehlerhafte Typannotationen hat, was sehr verwirrend ist. Noch schlimmer als inhaltlich falsche Kommentare oder Dokumentation, weil der Leser bei Typannotationen davon ausgeht, dass die überprüft wurden.