(🐞) `staticmethod` special-casing causes error to not be reported
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
If we copy the implementation of staticmethod from typeshed, mypy correctly reports the error here.
So it seems that mypys dedicated special-casing of staticmethod is causing this issue to be incorrectly not reported.
from collections.abc import Callable
from typing import Generic, ParamSpec, TypeVar, overload
P = ParamSpec("P")
T = TypeVar("T")
R_co = TypeVar("R_co", covariant=True)
def contextmanager(fn: Callable[P, R_co]) -> Callable[P, R_co]:
def func(*args: P.args, **kwargs: P.kwargs) -> R_co:
return fn(*args, **kwargs)
return func
class staticmethod_copy(Generic[P, R_co]):
@property
def __func__(self) -> Callable[P, R_co]: ...
@property
def __isabstractmethod__(self) -> bool: ...
def __init__(self, __f: Callable[P, R_co]) -> None: ...
@overload
def __get__(self, __instance: None, __owner: type) -> Callable[P, R_co]: ...
@overload
def __get__(self, __instance: T, __owner: type[T] | None = None) -> Callable[P, R_co]: ...
__name__: str
__qualname__: str
@property
def __wrapped__(self) -> Callable[P, R_co]: ...
def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R_co: ...
# Just the relevant part of staticmethod definition that is needed
#class staticmethod(Generic[P, R_co]):
# def __init__(self, __f: Callable[P, R_co]) -> None: ...
# def __call__(self, *args: P.args, **kwargs: P.kwargs) -> R_co: ...
class Foo:
@contextmanager
@staticmethod_copy
def copy() -> None: ...
@contextmanager
@staticmethod
def native() -> None: ...
Foo().copy() # ✅ error: Attribute function "copy" with type "Callable[[], None]" does not accept self argument [misc]
Foo().native() # ❌no error
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
Reproduire l’exemple fourni et comparer le traitement spécifique de staticmethod prévu par mypy avec l’implémentation copiée de typeshed. Suivre la manière dont les décorateurs et les types de descripteurs sont analysés ; le travail est terminé lorsque mypy signale l’erreur missing-self pour Foo().native() comme il le fait pour Foo().copy().
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