Support using Literal on __getattr__ and __getattribute__
Open
Nobody has claimed this yet.
feature
needs discussion
priority-1-normal
topic-literal-types
- Dominant language
- Python
- Stars
- 20.6k
- Forks
- 3.3k
- PR merge metrics
- PR metrics pending
Description
Hi! Feature request for using Literal on __getattr__ and __getattribute__.
- Please insert below the code you are checking with mypy,
or a mock-up repro if the source is private. We would appreciate
if you try to simplify your case to a minimal repro.
from typing import Literal
LiteralStrHello = Literal["hello"]
LiteralStrWorld = Literal["world"]
class A:
def __getattr__(self, name: LiteralStrHello) -> LiteralStrWorld:
assert name == "hello"
return "world"
def __getattribute__(self, name: LiteralStrHello) -> LiteralStrWorld:
assert name == "hello"
return "world"
- What is the actual behavior/output?
main.py:8: error: Invalid signature "def (main.A, Literal['hello']) -> Literal['world']" for "__getattr__"
main.py:12: error: Invalid signature "def (main.A, Literal['hello']) -> Literal['world']" for "__getattribute__"
main.py:12: error: Argument 1 of "__getattribute__" is incompatible with supertype "object"; supertype defines the argument type as "str"
Found 3 errors in 1 file (checked 1 source file)
- What is the behavior/output you expect?
Success: no issues found in 1 source file
- What are the versions of mypy and Python you are using? Mypy:mypy 0.770+dev.5336f272c2ac625bd40a79ab3dbbe3d548f147b8, Python:3.8.0
Do you see the same issue after installing mypy from Git master? yes
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by running the provided main.py repro with mypy and compare the reported diagnostics for getattr and getattribute. Trace the type-checking entry points for these special methods; done means the repro produces “Success: no issues found in 1 source file” without weakening ordinary object.getattribute checks.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- compilers, devtools
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100