Skip to content

Subclass uses superclass type for overridden unannotated attributes #2613

@grievejia

Description

@grievejia

Describe the Bug

Minimal repro:

# Pattern: Class variable overridden in subclass, methods called from subclass 

class Request:
    def __init__(self, url: str) -> None:
        self.url: str = url

class FormRequest(Request):
    @classmethod
    def from_response(cls, response: str) -> FormRequest:
        return cls(response)


class BaseTest:
    request_class = Request

class MyTest(BaseTest):
    request_class = FormRequest

    def test_from_response(self) -> None:
        # FP: pyrefly resolves self.request_class as type[Request]
        # (from the base class), ignoring the override in this class
        req = self.request_class.from_response(
            "http://example.com/form",
        )

No other type checker count this as an error

Sandbox Link

https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeSIAxAAQAKqALgzAE7qLUDCUqcc1AN1QsIqbLGq4BrEZkwx01CIrgBXbAGMefADTUAtjAYALXJn4bUUWJmpgWufdTWbt-ADrpPW3vwBKMACOqvAMiJ7UkdTyYNQA%2BnHKEAwJABRwMFBgeqosUBxwDCwAlNQAtAB81AByuOgw4YpRzRlZhLn5zkXUALzUHZ7ebtQAYrgs%2BgHBoalTIYXFjc0AAj58hiZmEVExdg76cSzwxHUZqVpwekdwJ%2BgZBUWllaPjk0HzYdvNkUcMuYoXVLXW4ZYqDLzoNb8ABCvBgABVQksokdpoU4lDetQ5qFwZiALKkRGFVKwjLEhiLL7UVEfDHDPpjCY4wrg5q7Zjo%2ByOQ7HU4wdKZMBPKq1erI77UGgjWgcMhHMBQUg0%2BC4KDSfitMCEWmhem%2Bai8agMUjEGAAbRZDAAutTmjRUtynCYYNRsHDqFDinoIABzdDjZS%2B43GV1SGQQeRKRQmCAWNx2lFBLFanXvPVQwhO3k3fmpROS9wgYxMYiIAD05Zg%2BFQ%2BmIsEIGkc5bAryLOgL1GKIB0IFUDGgcBI5EQVGoAFUB1BksqwKpIQPTuDdq2Jow4uhVPpsKxUvgOMpKeUqoUWBKVX82HYi9Utzuz9RgPgAL5Fzw9kDymCK0iEBiOKAKBoWhSAVJVnAwHACE9OpIF9XJGAgOpCE8GgAGUYFdEsGGIOAK3LL8f0IcZfSrdBy0wXANDgcsm3QOCEMXci7HGQ0hGgMQJDohiWEQupJGIJih08MhNnQMppBYOAkMUPoiwAZkIABGAAmN90BAZ9e1QDQB2kEZoBgCg0CwPAiDITSgA

(Only applicable for extension issues) IDE Information

No response

Metadata

Metadata

Assignees

Labels

typecheckingusabilityUsability & readiness issues identified with running Pyrefly on top OSS projects

Type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions