by Anonymous » 31 Aug 2025, 11:51
Ich arbeite mit einer generischen Funktion in Python und versuche zu verstehen, wie der tatsächliche Typ eines generischen Parameters ordnungsgemäß überprüft werden kann, um den Typ aller Parameter einzugrenzen, die an dieselbe generische Typ Variable t gebunden sind. Hier ist ein Beispiel für meinen Code: < /p>
Code: Select all
from typing import TypeVar
T = TypeVar('T', int, str)
def foo(a: T, b: T) -> None:
if isinstance(a, int):
b.as_integer_ratio() # Type checker error
< /code>
Wenn ich diesen Code mit einem Typ-Checker ausführe (z. B. Pylance), erhalte ich den folgenden Fehler: < /p>
Cannot access attribute "as_integer_ratio" for class "str*"
Attribute "as_integer_ratio" is unknown
Pylance(reportAttributeAccessIssue)
Ich habe erwartet, dass ein und b beide mit derselben Typ -Variablen t überprüft werden, dass A ein int auch ein enger B auf int eingrenzen würde. Warum berücksichtigt der Typ -Checker immer noch B , um möglicherweise ein Str ? Generika in Python wäre sehr geschätzt!
Ich arbeite mit einer generischen Funktion in Python und versuche zu verstehen, wie der tatsächliche Typ eines generischen Parameters ordnungsgemäß überprüft werden kann, um den Typ aller Parameter einzugrenzen, die an dieselbe generische Typ Variable t gebunden sind. Hier ist ein Beispiel für meinen Code: < /p>
[code]from typing import TypeVar
T = TypeVar('T', int, str)
def foo(a: T, b: T) -> None:
if isinstance(a, int):
b.as_integer_ratio() # Type checker error
< /code>
Wenn ich diesen Code mit einem Typ-Checker ausführe (z. B. Pylance), erhalte ich den folgenden Fehler: < /p>
Cannot access attribute "as_integer_ratio" for class "str*"
Attribute "as_integer_ratio" is unknown
Pylance(reportAttributeAccessIssue)
[/code]
Ich habe erwartet, dass ein und b beide mit derselben Typ -Variablen t überprüft werden, dass A ein int auch ein enger B auf int eingrenzen würde. Warum berücksichtigt der Typ -Checker immer noch B , um möglicherweise ein Str ? Generika in Python wäre sehr geschätzt!