@@ -865,6 +865,42 @@ reveal_type(Derived().declared_in_body) # revealed: int | None
865865reveal_type(Derived().defined_in_init) # revealed: str | None
866866```
867867
868+ #### Incorrect assignments in derived classes
869+
870+ ``` py
871+ class Base :
872+ declared_on_body_overwritten_on_body: str
873+ declared_on_body_overwritten_in_init: str
874+
875+ def __init__ (self ) -> None :
876+ self .declared_in_init_overwritten_on_body: str
877+ self .declared_in_init_overwritten_in_init: str
878+
879+ class Derived (Base ):
880+ # TODO : this should be an error
881+ declared_on_body_overwritten_on_body = None
882+
883+ # TODO : this should be an error
884+ declared_in_init_overwritten_on_body = None
885+
886+ def f (self ) -> None :
887+ # TODO : this should be an error
888+ self .declared_on_body_overwritten_in_init = None
889+
890+ # TODO : this should be an error
891+ self .declared_in_init_overwritten_in_init = None
892+
893+ reveal_type(Derived().declared_on_body_overwritten_in_init) # revealed: str
894+
895+ reveal_type(Derived().declared_in_init_overwritten_in_init) # revealed: str
896+
897+ # TODO : This should be `str`
898+ reveal_type(Derived().declared_on_body_overwritten_on_body) # revealed: Unknown | None | str
899+
900+ # TODO : This should be `str`
901+ reveal_type(Derived().declared_in_init_overwritten_on_body) # revealed: Unknown | None | str
902+ ```
903+
868904## Accessing attributes on class objects
869905
870906When accessing attributes on class objects, they are always looked up on the type of the class
0 commit comments