@@ -3311,6 +3311,7 @@ def check_assignment(
33113311 # Partial type can't be final, so strip any literal values.
33123312 rvalue_type = remove_instance_last_known_values (rvalue_type )
33133313 inferred_type = make_simplified_union ([rvalue_type , NoneType ()])
3314+ self .binder .put (lvalue , inferred_type )
33143315 self .set_inferred_type (var , lvalue , inferred_type )
33153316 else :
33163317 var .type = None
@@ -3373,6 +3374,7 @@ def check_assignment(
33733374 break
33743375 if has_if_ancestor :
33753376 lvalue_type = make_optional_type (lvalue_type )
3377+ self .binder .put (lvalue , lvalue_type )
33763378 self .set_inferred_type (lvalue .node , lvalue , lvalue_type )
33773379
33783380 rvalue_type , lvalue_type = self .check_simple_assignment (
@@ -3413,7 +3415,11 @@ def check_assignment(
34133415 and lvalue_type is not None
34143416 ):
34153417 lvalue .node .type = remove_instance_last_known_values (lvalue_type )
3416- elif self .options .allow_redefinition_new and lvalue_type is not None :
3418+ elif (
3419+ self .options .allow_redefinition_new
3420+ and lvalue_type is not None
3421+ and not isinstance (lvalue_type , PartialType )
3422+ ):
34173423 # TODO: Can we use put() here?
34183424 self .binder .assign_type (lvalue , lvalue_type , lvalue_type )
34193425
0 commit comments