From 51cc6ad5a130b8a1d0a62083a666d097db35dc5a Mon Sep 17 00:00:00 2001 From: "stewart.hutchins" Date: Fri, 6 Jun 2025 20:44:20 +0100 Subject: [PATCH] Feat: Enhance advanced-type challenge with typevar and enforcing return type. --- challenges/advanced-type/question.py | 16 ++++++++++------ challenges/advanced-type/solution.py | 20 +++++++++++--------- 2 files changed, 21 insertions(+), 15 deletions(-) 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