python / python/typing

`TypedMapping` for extended compatibility?

Ouverte
#1,952 4 commentaires 2 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

topic: feature
Langage dominant
Python
Étoiles
1.8k
Forks
302
Merge moyen
23 h
PR mergées (30 j)
8

Description

Hello,

Consider the following, where lock aims at making provided argument immutable.

@dataclass
class Works:
    foo: Mapping

    def lock(self) -> None:
        self.foo = MappingProxyType(self.foo)

It works great with mypy, no issue. Now imagine I want to enforce a bit more to foo by requesting it be compatible with a Movie. I would try the following, without success.

class Movie(TypedDict):
    author: str
    year: int

@dataclass
class Fails:
    foo: Movie

    def lock(self) -> None:
        self.foo = MappingProxyType(self.foo)  # error: Incompatible types in assignment (expression has type "MappingProxyType[str, object]", variable has type "Movie")  [assignment]

Is there an workaround? If not, is if a good idea to discuss the possibility of a TypedMapping, that would simply work as follow?

class Movie(TypedMapping):  # New feature ?
    author: str
    year: int

@dataclass
class Fixed:
    foo: Movie

    def lock(self) -> None:
        self.foo = MappingProxyType(self.foo)  # Would work

Thanks for your time.

All the best!
Élie.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

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 les exemples de TypedDict, Mapping et MappingProxyType dans l’issue. Suivez l’incompatibilité d’affectation signalée et comparez le comportement TypedMapping demandé aux règles de typing existantes ; le travail est considéré comme terminé lorsqu’une solution de contournement prise en charge est documentée ou qu’une proposition de fonctionnalité clairement délimitée est produite.

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

Évaluation

Stack technique
python
Domaine
developer-experience
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
28/100

Recevez les nouvelles issues par e-mail

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