webentwicklung-frage-antwort-db.com.de

Geben Sie Hinweise mit benutzerdefinierten Klassen ein

Konnte keine endgültige Antwort finden. Ich möchte einen Typhinweis für eine Funktion machen, wobei der Typ eine benutzerdefinierte Klasse ist, die ich definiert habe und die als CustomClass() bezeichnet wird.

Und dann sagen wir mal in irgendeiner Funktion, nenne es FuncA(arg), ich habe ein Argument mit dem Namen arg. Wäre die richtige Art, hint FuncA einzugeben:

def FuncA(arg: CustomClass):

Oder wäre es:

def FuncA(Arg:Type[CustomClass]):?

54
hhprogram

Der erstere ist korrekt , wenn arg eine Instanz von CustomClass akzeptiert :

def FuncA(arg: CustomClass):
    #     ^ instance of CustomClass

Falls Sie die Klasse CustomClass selbst (oder einen Subtyp) wollen, sollten Sie schreiben:

from typing import Type  # you have to import Type

def FuncA(arg: Type[CustomClass]):
    #     ^ CustomClass (class object) itself

So wie es in der Dokumentation geschrieben steht über Tippen :

class typing.Type(Generic[CT_co])

Eine mit C kommentierte Variable akzeptiert möglicherweise einen Wert vom Typ C. Im Gegensatz dazu akzeptiert eine Variable , die mit Type[C] Kommentiert ist, möglicherweise Werte, die selbst Klassen sind . Insbesondere akzeptiert sie die Klassenobjekt von C.

Die Dokumentation enthält ein Beispiel mit der Klasse int:

a = 3         # Has type 'int'
b = int       # Has type 'Type[int]'
c = type(a)   # Also has type 'Type[int]'
70