Question: How to bound a mixin to a subclass
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 20.6k
- Fork
- 3.3k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
I created a mixin for Django models and I would like to know how to properly type it, e.g.:
from django.db import models
T = TypeVar("T", bound=models.Model)
class SafeCreateMixin:
@classmethod
@transaction.atomic()
def safe_create(cls: Type[T], **kwargs) -> Optional[T]:
try:
return cls.objects.create(**kwargs)
except IntegrityError as e:
return None
class MyModel(SafeCreateMixin, models.Model):
....
It fails with the following error:
error: The erased type of self "Type[django.db.models.base.Model]" is not a supertype of its class "Type[SafeCreateMixin]"
I understood that the mypy docs recommend creating a Protocol for mixins, but in my case, I just want to enforce that my mixins are added to a subclass of models.Model
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia riproducendo l’errore segnalato con l’esempio di SafeCreateMixin e MyModel, quindi leggi la documentazione di mypy su mixins e Protocols. Determina se il vincolo di sottoclasse richiesto è supportato o richiede una decisione progettuale; il lavoro è completato quando il comportamento e l’approccio consigliato sono chiaramente stabiliti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- django, python
- Ambito
- devtools
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100