python / python/mypy

`_v` can be read and written from the outside of the class so the generic class should be invariant properly.

Ouverte
#20,501 2 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug pending
Langage dominant
Python
Étoiles
20.6k
Forks
3.3k
Métriques de merge des PR
Métriques de PR en attente

Description

*Memo:

  • mypy --strict test.py
  • mypy 1.19.1
  • Python 3.14.0
  • Windows 11

v can be read and written from the outside of the class so the generic class is invariant properly as shown below:

class Cls[T]:
    v: T = cast(T, 100) # Invariant

cls: Cls[int] = Cls[int]()

# It indicates `Invariant`.
cls1: Cls[float] = cls # Errpr
cls2: Cls[int] = cls   # No error
cls3: Cls[bool] = cls  # Error

# Read & Write
print(cls.v) # No error
cls.v = 200  # No error

Now, _v can be read and written from the outside of the class but the generic class is covariant improperly as shown below so it should be invariant properly:

*Memo:

  • A single leading underscore(_abc) just indicates Internal use so it's not private(Readable & Writable).
class Cls[T]:
    _v: T = cast(T, 100) # Covariant

cls: Cls[int] = Cls[int]()

# It indicates `Covariant`.
cls1: Cls[float] = cls # No error
cls2: Cls[int] = cls   # No error
cls3: Cls[bool] = cls  # Error

# Read & Write
print(cls._v) # No error
cls._v = 200  # No error

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.

Piste de recherche

Commencez par reproduire le rapport de test.py avec mypy --strict, en utilisant les versions indiquées mypy 1.19.1 et Python 3.14.0. Suivez la manière dont mypy déduit la variance pour les classes génériques avec des attributs publics et des attributs précédés d’un seul trait de soulignement. Le travail est terminé lorsque l’exemple _v est traité comme invariant, tout en conservant les affectations valides et invalides présentées.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
python
Domaine
devtools
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
38/100

Recevez les nouvelles issues par e-mail

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