diff --git a/challenges/advanced-type/question.py b/challenges/advanced-type/question.py index 0e28239..644a617 100644 --- a/challenges/advanced-type/question.py +++ b/challenges/advanced-type/question.py @@ -6,10 +6,13 @@ def make_object(cls): - return cls() + ... ## End of your code ## +from typing import assert_type + + class MyClass: pass @@ -18,8 +21,9 @@ def f(): pass -c = make_object(MyClass) -c = make_object(int) -c = make_object(f) # expect-type-error -c = make_object("sss") # expect-type-error -c = make_object(["sss"]) # expect-type-error +assert_type(make_object(MyClass), MyClass) +assert_type(make_object(int), int) + +make_object(f) # expect-type-error +make_object("sss") # expect-type-error +make_object(["sss"]) # expect-type-error diff --git a/challenges/advanced-type/solution.py b/challenges/advanced-type/solution.py index 1b77608..cb39eca 100644 --- a/challenges/advanced-type/solution.py +++ b/challenges/advanced-type/solution.py @@ -4,14 +4,15 @@ `make_object` takes a class returns an instance of it. """ -from typing import Any - -def make_object(cls: type[Any]): - return cls() +def make_object[T](cls: type[T]) -> T: + ... ## End of your code ## +from typing import assert_type + + class MyClass: pass @@ -20,8 +21,9 @@ def f(): pass -c = make_object(MyClass) -c = make_object(int) -c = make_object(f) # expect-type-error -c = make_object("sss") # expect-type-error -c = make_object(["sss"]) # expect-type-error +assert_type(make_object(MyClass), MyClass) +assert_type(make_object(int), int) + +make_object(f) # expect-type-error +make_object("sss") # expect-type-error +make_object(["sss"]) # expect-type-error