Special-casing `__hash__`
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 45/100
- Type d'issue
- Documentation
- Clarté
- Plutôt claire
- Activité
- Calme
- Stack technique
- python
- Domaine
- documentation
Piste de recherche
Commencez par lire la spécification de typing, en particulier la section existante sur les dataclasses, et examinez la discussion ainsi que les alternatives proposées dans cet issue. Définissez les règles convenues pour la hachabilité par défaut, __hash__: ClassVar[None] ou __hash__ = None, les méthodes __hash__ explicites et l’héritage ; le travail est terminé lorsque la spécification de typing documente le comportement accepté.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
The concept of "hashable" and "unhashable" classes has been a bit of the sore point in the past. typeshed uses __hash__: ClassVar[None] to mark classes as non-hashable, although that requires a # type: ignore[assignment] annotation. I think this is special-cased by at least some type checkers for marking classes as unhashable.
Except for some wordage in the dataclasses section, the typing spec is silent about hashability. Since I believe that this needs special-casing by type checkers, it should be added to the typing spec. A raw idea:
- Classes are hashable by default (due to
object.__hash__()being implemented and typeshed having a type corresponding type annotation.) - To mark a class as non-hashable, use
__hash__: ClassVar[None]. We could alternatively use something simpler such as__hash__ = None. I believe we used to use that, but I don't know why it's changed. - To mark a class as hashable, use
def __hash__(self, ...) -> ..., usuallydef __hash__(self) -> int: .... - Sub-classes inherit their parent's hashability, unless overridden.
- Langage dominant
- Python
- Étoiles
- 1.8k
- Forks
- 302
- Merge moyen
- 4 h 16 min
- PR mergées (30 j)
- 7
Préparer son environnement
Nous n'avons pas encore vérifié les fichiers d'installation de ce projet. Commencez par son README, et consultez notre guide de la première contribution pour les étapes générales.
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.
Autres issues de python/typing
-
topic: typing spec
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
python/typing#2356 · 2 commentaires · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
-
topic: typing spec
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
Les mainteneurs répondent en général sous 1 jour
-
topic: documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
python/typing#2227 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
topic: documentation
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
python/typing#2150 · 2 commentaires · 2 réactions ·
Les mainteneurs répondent en général sous 1 jour
-
topic: conformance tests topic: typing spec
Difficulté 3/5 1-2 jours Accessibilité débutants 72/100
python/typing#2351 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de python/typing
Issues similaires
-
bug status/needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
prowler-cloud/prowler#12887 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
area: desktop platform: macos priority: p3 status: ready type: enhancement
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
use-agent-os/agent-os#3484 ·
Les mainteneurs répondent en général sous 2 jours
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
open-telemetry/opentelemetry-python-contrib#5113 · 2 commentaires · 2 réactions ·
Les mainteneurs répondent en général sous 1 jour
-
external
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
langchain-ai/docs#6255 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour