python / python/mypy

Followup tasks for checkmember.py refactoring

Ouverte
#19,299 2 commentaires 0 réactions 1 personne assignée Voir sur GitHub

@ilevkivskyi y travaille déjà.

Depuis le 14/6/2025.

meta priority-1-normal refactoring
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Merge moyen
1 j 18 h
PR mergées (30 j)
54

Description

These are some of the remaining tasks after https://github.com/python/mypy/issues/7724 is done. These are either somewhat tricky and/or somewhat boring and/or less pressing. In no particular order:

  • We should cleanup/unify attribute writeability logic when checking overrides and subtyping. Most notably:
    • Multiple inheritance is quite messy in this regard.
    • Descriptors with custom __set__() should follow the same logic (including use of mutable-override error code) as properties with custom setters in protocol subtyping and LSP checks.
  • We need to set type_checker in more places to benefit from the new (complete) logic for find_member(), most notable in semanal_typeargs.py and in post-semanal plugins.
  • Now that all attribute access is going through checkmember we should refactor it itself. Couple ideas:
    • Merge bind_self() and check_self_arg()
    • Generalize/extend analyze_decorator_or_funcbase_access()
    • Cleanup class attribute access and unify it with instance attribute access
  • We should re-think how deferrals work, and re-enable some deferrals that are currently skipped (current logic is too limited, we stop all inference after first deferral, and can't defer module scope). The new logic may be like this:
    • We can defer either a module scope or a top-level function (similar to fine-grained incremental)
    • Use "sticky" (i.e. propagating to nested nodes) flag to suppress Any-related error reporting
    • Use new TypeOfAny to suppress inferring bogus Any types for variables
    • Update all isinstance()-like checks to handle this new kind of Any
  • Cleanup Var (and related RefExpr and AssignmentStmt) flags. There are way too many of them, and some of them are used inconsistently.
  • Couple pedantic things we shouldn't even do:
    • Check class level access for descriptor overrides
    • Take into account __getattr__() for LSP checks

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.