attrs plugin does not implement the new attributes collection algorithm
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 20.6k
- Forks
- 3.3k
- Métriques de merge des PR
- Métriques de PR en attente
Description
Bug Report
The attrs plugin does not implement the new attributes collection algorithm that is enabled with @attr.s(collect_by_mro=True) in the old API and is the only option in the new API.
To Reproduce
(mypy-play.net does not have stubs for attrs)
from attrs import define, field
@define
class A:
f: int = field(kw_only=True)
@define
class B(A):
pass
@define
class C(A):
f: int = field()
@define
class D(B, C):
pass
# D(f: int) for attrs.define, but D(*, f: int) for attr.s
d = D(123)
print(d.f)
Expected Behavior
The signature for D should be D(f: int), so this should type check. It works fine at run time.
Actual Behavior
attrs_mro.py:20: error: Too many positional arguments for "D" [misc]
I get the same error if I replace @define and field with @attrs(collect_by_mro=True) and attrib from the old namespace respectively. Note that this behavior is correct when @attrs is used without collect_by_mro=True.
Your Environment
- Mypy version used: 1.5.1
- Python version used: 3.11
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par mypy's attrs plugin et reproduisez l'exemple signalé d'héritage multiple avec attrs.define, field et collect_by_mro=True. Comparez la signature de constructeur inférée au comportement attendu de D(f: int), puis ajoutez ou mettez à jour la couverture afin que l'appel positionnel passe la vérification de types, tout en conservant le comportement existant de non-collect_by_mro.
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
- 45/100