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:

Code: Alles auswählen

class A:
	beispiel:B
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

Code: Alles auswählen

from __future__ import annotations
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.