python / python/typing

Typing decorators which enrich a class

Offen
#1,321 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

topic: feature
Vorherrschende Sprache
Python
Sterne
1.8k
Forks
302
Ø Merge
23 Std.
Gemergte PRs (30 T.)
8

Beschreibung

Hi

I would like to type a decorator which takes as input a class and returns the same class with added attributes, i.e., a subclass.
Example:

import typing

_T = typing.TypeVar("_T")


def config(*, /, prefix: str) -> typing.Callable[[typing.Type[_T], ???]:
    def wrap(cls: typing.Type[_T]) -> ???:
        class Subclass(cls):  # or could do cls.prefix = prefix instead of subclassing
            prefix: str = prefix

        return Subclass

    return wrap


@config(prefix="test")
class A:
    ...


print(A.prefix)

Been searching for an answer and experimenting for a few days now and can't find anything concrete. Any help would be much appreciated

Thank you

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Es werden keine Dateien, Tests oder Einstiegspunkte genannt. Beginne damit, die aktuelle Anleitung zur Typisierung von Klassendekoratoren und das Verhalten von Typprüfern für die gezeigten config- und wrap-Signaturen zu überprüfen; als abgeschlossen sollte gelten, dass es eine dokumentierte, akzeptierte Möglichkeit gibt, den Typ der Eingabeklasse beizubehalten und gleichzeitig das hinzugefügte Attribut prefix verfügbar zu machen.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
devtools
Issue-Typ
Feature
Schwierigkeit
5/5
Geschätzter Aufwand
Über eine Woche
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.