@@ -1081,7 +1081,8 @@ def adapt_typehints(
10811081 )
10821082
10831083 try :
1084- val_class = import_object (resolve_class_path_by_name (typehint , val ["class_path" ]))
1084+ class_path = resolve_class_path_by_name (typehint , val ["class_path" ])
1085+ val_class = import_object (class_path )
10851086 if is_instance_or_supports_protocol (val_class , typehint ):
10861087 return val_class # importable instance
10871088 if is_protocol (val_class ):
@@ -1098,10 +1099,14 @@ def adapt_typehints(
10981099 elif prev_implicit_defaults :
10991100 inner_parser = ActionTypeHint .get_class_parser (typehint , sub_add_kwargs )
11001101 prev_val .init_args = inner_parser .get_defaults ()
1102+ if prev_val .class_path != class_path :
1103+ inner_parser = ActionTypeHint .get_class_parser (val_class , sub_add_kwargs )
1104+ for key in inner_parser .get_defaults ().keys ():
1105+ prev_val .init_args .pop (key , None )
11011106 if not_subclass :
11021107 msg = "implement protocol" if is_protocol (typehint ) else "correspond to a subclass of"
11031108 raise_unexpected_value (f"Import path { val ['class_path' ]} does not { msg } { typehint .__name__ } " )
1104- val ["class_path" ] = get_import_path ( val_class )
1109+ val ["class_path" ] = class_path
11051110 val = adapt_class_type (val , serialize , instantiate_classes , sub_add_kwargs , prev_val = prev_val )
11061111 except (ImportError , AttributeError , AssertionError , ArgumentError ) as ex :
11071112 class_path = val if isinstance (val , str ) else val ["class_path" ]
0 commit comments