types — Dynamische Typenerstellung und Namen für integrierte Typen¶
Quellcode: Lib/types.py
Dieses Modul definiert Hilfsfunktionen zur Unterstützung der dynamischen Erstellung neuer Typen.
Es definiert auch Namen für einige Objekttypen, die vom Standard-Python-Interpreter verwendet werden, aber nicht als integrierte Typen wie int oder str, verfügbar gemacht werden.
Schließlich bietet es einige zusätzliche typbezogene Hilfsklassen und Funktionen, die nicht grundlegend genug sind, um integrierte Typen zu sein.
Dynamische Typenerstellung¶
- types.new_class(name, bases=(), kwds=None, exec_body=None)¶
Erstellt dynamisch ein Klassenobjekt unter Verwendung der entsprechenden Metaklasse.
Die ersten drei Argumente sind die Komponenten, aus denen sich ein Klassendefinitionskopf zusammensetzt: der Klassenname, die Basisklassen (in Reihenfolge), die Schlüsselwortargumente (wie
metaclass).Das Argument exec_body ist ein Callback, der verwendet wird, um den frisch erstellten Klassennamenraum zu füllen. Es sollte den Klassennamenraum als einziges Argument akzeptieren und den Namenraum direkt mit dem Klasseninhalt aktualisieren. Wenn kein Callback angegeben wird, hat dies denselben Effekt wie die Übergabe von
lambda ns: None.Hinzugefügt in Version 3.3.
- types.prepare_class(name, bases=(), kwds=None)¶
Berechnet die entsprechende Metaklasse und erstellt den Klassennamenraum.
Die Argumente sind die Komponenten, aus denen sich ein Klassendefinitionskopf zusammensetzt: der Klassenname, die Basisklassen (in Reihenfolge) und die Schlüsselwortargumente (wie
metaclass).Der Rückgabewert ist ein 3-Tupel:
metaclass, namespace, kwdsmetaclass ist die entsprechende Metaklasse, namespace ist der vorbereitete Klassennamenraum und kwds ist eine aktualisierte Kopie des übergebenen kwds-Arguments mit entferntem
'metaclass'-Eintrag. Wenn kein kwds-Argument übergeben wird, ist dies ein leeres Dictionary.Hinzugefügt in Version 3.3.
Geändert in Version 3.6: Der Standardwert für das Element
namespacedes zurückgegebenen Tupels wurde geändert. Nun wird eine Einfügungsreihenfolge beibehaltende Zuordnung verwendet, wenn die Metaklasse keine__prepare__-Methode hat.
Siehe auch
- Metaklassen
Vollständige Details des Klassenkonstruktionsprozesses, der von diesen Funktionen unterstützt wird
- PEP 3115 — Metaklassen in Python 3000
Führte den
__prepare__-Namespace-Hook ein
- types.resolve_bases(bases)¶
Löst MRO-Einträge dynamisch gemäß PEP 560 auf.
Diese Funktion sucht nach Elementen in bases, die keine Instanzen von
typesind, und gibt ein Tupel zurück, in dem jedes solche Objekt, das eine__mro_entries__()-Methode hat, durch ein entpacktes Ergebnis des Aufrufs dieser Methode ersetzt wird. Wenn ein bases-Element eine Instanz vontypeist oder keine__mro_entries__()-Methode hat, wird es unverändert in das Rückgabetupel aufgenommen.Hinzugefügt in Version 3.7.
- types.get_original_bases(cls, /)¶
Gibt das Tupel von Objekten zurück, die ursprünglich als Basen von cls übergeben wurden, bevor die
__mro_entries__()-Methode für beliebige Basen aufgerufen wurde (gemäß den Mechanismen in PEP 560). Dies ist nützlich für die Introspektion von Generics.Für Klassen, die ein Attribut
__orig_bases__haben, gibt diese Funktion den Wert voncls.__orig_bases__zurück. Für Klassen ohne das Attribut__orig_bases__wirdcls.__bases__zurückgegeben.Beispiele
from typing import TypeVar, Generic, NamedTuple, TypedDict T = TypeVar("T") class Foo(Generic[T]): ... class Bar(Foo[int], float): ... class Baz(list[str]): ... Eggs = NamedTuple("Eggs", [("a", int), ("b", str)]) Spam = TypedDict("Spam", {"a": int, "b": str}) assert Bar.__bases__ == (Foo, float) assert get_original_bases(Bar) == (Foo[int], float) assert Baz.__bases__ == (list,) assert get_original_bases(Baz) == (list[str],) assert Eggs.__bases__ == (tuple,) assert get_original_bases(Eggs) == (NamedTuple,) assert Spam.__bases__ == (dict,) assert get_original_bases(Spam) == (TypedDict,) assert int.__bases__ == (object,) assert get_original_bases(int) == (object,)
Hinzugefügt in Version 3.12.
Siehe auch
PEP 560 — Kernunterstützung für das Typing-Modul und generische Typen
Standard-Interpreter-Typen¶
Dieses Modul stellt Namen für viele der Typen bereit, die zur Implementierung eines Python-Interpreters erforderlich sind. Es vermeidet bewusst die Aufnahme einiger Typen, die nur zufällig während der Verarbeitung entstehen, wie z. B. der Typ listiterator.
Typische Verwendungen dieser Namen sind für isinstance()- oder issubclass()-Prüfungen.
Wenn Sie eine dieser Arten instanziieren, beachten Sie, dass sich Signaturen zwischen Python-Versionen unterscheiden können.
Für die folgenden Typen sind Standardnamen definiert
- types.FunctionType¶
- types.LambdaType¶
Der Typ von benutzerdefinierten Funktionen und Funktionen, die durch
lambda-Ausdrücke erstellt wurden.Löst ein Audit-Ereignis
function.__new__mit dem Argumentcodeaus.Das Audit-Ereignis tritt nur bei direkter Instanziierung von Funktions-Objekten auf und wird nicht bei normaler Kompilierung ausgelöst.
- types.GeneratorType¶
Der Typ von Generator-Iterator-Objekten, die von Generatorfunktionen erstellt werden.
- types.CoroutineType¶
Der Typ von Coroutine-Objekten, die von
async def-Funktionen erstellt werden.Hinzugefügt in Version 3.5.
- types.AsyncGeneratorType¶
Der Typ von asynchronen Generator-Iterator-Objekten, die von asynchronen Generatorfunktionen erstellt werden.
Hinzugefügt in Version 3.6.
- class types.CodeType(**kwargs)¶
Der Typ von Code-Objekten, wie sie von
compile()zurückgegeben werden.Löst ein Audit-Ereignis
code.__new__mit den Argumentencode,filename,name,argcount,posonlyargcount,kwonlyargcount,nlocals,stacksize,flagsaus.Beachten Sie, dass die auditierten Argumente möglicherweise nicht mit den Namen oder Positionen übereinstimmen, die der Initialisierer benötigt. Das Audit-Ereignis tritt nur bei direkter Instanziierung von Code-Objekten auf und wird nicht bei normaler Kompilierung ausgelöst.
- types.CellType¶
Der Typ für Cell-Objekte: solche Objekte werden als Container für die Closure-Variablen einer Funktion verwendet.
Hinzugefügt in Version 3.8.
- types.MethodType¶
Der Typ von Methoden von Instanzen benutzerdefinierter Klassen.
- types.BuiltinFunctionType¶
- types.BuiltinMethodType¶
Der Typ von integrierten Funktionen wie
len()odersys.exit()und Methoden integrierter Klassen. (Hier bedeutet der Begriff „integriert“ „in C geschrieben“.)
- types.WrapperDescriptorType¶
Der Typ von Methoden einiger integrierter Datentypen und Basisklassen wie
object.__init__()oderobject.__lt__().Hinzugefügt in Version 3.7.
- types.MethodWrapperType¶
Der Typ von *gebundenen* Methoden einiger integrierter Datentypen und Basisklassen. Zum Beispiel ist es der Typ von
object().__str__.Hinzugefügt in Version 3.7.
- types.NotImplementedType¶
Der Typ von
NotImplemented.Hinzugefügt in Version 3.10.
- types.MethodDescriptorType¶
Der Typ von Methoden einiger integrierter Datentypen wie
str.join().Hinzugefügt in Version 3.7.
- types.ClassMethodDescriptorType¶
Der Typ von *ungebundenen* Klassenmethoden einiger integrierter Datentypen wie
dict.__dict__['fromkeys'].Hinzugefügt in Version 3.7.
- class types.ModuleType(name, doc=None)¶
Der Typ von Modulen. Der Konstruktor nimmt den Namen des zu erstellenden Moduls und optional seinen Docstring entgegen.
Siehe auch
- Dokumentation zu Modul-Objekten
Bietet Details zu den speziellen Attributen, die auf Instanzen von
ModuleTypezu finden sind.importlib.util.module_from_spec()Module, die mit dem Konstruktor
ModuleTypeerstellt wurden, werden mit vielen ihrer speziellen Attribute auf nicht gesetzt oder auf Standardwerte gesetzt erstellt.module_from_spec()bietet eine robustere Methode zur Erstellung vonModuleType-Instanzen, die sicherstellt, dass die verschiedenen Attribute korrekt gesetzt sind.
- class types.GenericAlias(t_origin, t_args)¶
Der Typ von parametrisierten Generics wie
list[int].t_originsollte eine nicht-parametrisierte generische Klasse sein, wie z. B.list,tupleoderdict.t_argssollte einTupel(möglicherweise der Länge 1) von Typen sein, diet_originparametrisieren.>>> from types import GenericAlias >>> list[int] == GenericAlias(list, (int,)) True >>> dict[str, int] == GenericAlias(dict, (str, int)) True
Hinzugefügt in Version 3.9.
Geändert in Version 3.9.2: Dieser Typ kann jetzt Unterklassen bilden.
Siehe auch
- Generische Alias-Typen
Detaillierte Dokumentation zu Instanzen von
types.GenericAlias- PEP 585 — Typ-Hinting für Generics in Standard-Sammlungen
Einführung der Klasse
types.GenericAlias
- class types.UnionType¶
Der Typ von Union-Typ-Ausdrücken.
Hinzugefügt in Version 3.10.
Geändert in Version 3.14: Dies ist jetzt ein Alias für
typing.Union.
- class types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)¶
Der Typ von Traceback-Objekten, wie sie in
sys.exception().__traceback__gefunden werden.Siehe die Sprachreferenz für Details zu den verfügbaren Attributen und Operationen sowie Hinweise zur dynamischen Erstellung von Tracebacks.
- types.FrameType¶
Der Typ von Frame-Objekten, wie sie in
tb.tb_framegefunden werden, wenntbein Traceback-Objekt ist.
- types.GetSetDescriptorType¶
Der Typ von Objekten, die in Erweiterungsmodulen mit
PyGetSetDefdefiniert sind, wie z. B.FrameType.f_localsoderarray.array.typecode. Dieser Typ wird als Deskriptor für Objektattribute verwendet; er hat denselben Zweck wie der Typproperty, aber für Klassen, die in Erweiterungsmodulen definiert sind.
- types.MemberDescriptorType¶
Der Typ von Objekten, die in Erweiterungsmodulen mit
PyMemberDefdefiniert sind, wie z. B.datetime.timedelta.days. Dieser Typ wird als Deskriptor für einfache C-Datenmember verwendet, die Standardkonvertierungsfunktionen verwenden; er hat denselben Zweck wie der Typproperty, aber für Klassen, die in Erweiterungsmodulen definiert sind.Zusätzlich wird, wenn eine Klasse mit einem Attribut
__slots__definiert wird, für jeden Slot eine Instanz vonMemberDescriptorTypeals Attribut der Klasse hinzugefügt. Dies ermöglicht es dem Slot, im__dict__der Klasse zu erscheinen.CPython-Implementierungsdetail: In anderen Implementierungen von Python kann dieser Typ identisch mit
GetSetDescriptorTypesein.
- class types.MappingProxyType(mapping)¶
Schreibgeschützter Proxy für eine Zuordnung. Er bietet eine dynamische Ansicht auf die Einträge der Zuordnung, was bedeutet, dass die Ansicht diese Änderungen widerspiegelt, wenn sich die Zuordnung ändert.
Hinzugefügt in Version 3.3.
Geändert in Version 3.9: Aktualisiert zur Unterstützung des neuen Union-Operators (
|) aus PEP 584, der einfach an die zugrunde liegende Zuordnung delegiert.- key in proxy
Gibt
Truezurück, wenn die zugrunde liegende Zuordnung einen Schlüssel key hat, andernfallsFalse.
- proxy[key]
Gibt das Element der zugrunde liegenden Zuordnung mit dem Schlüssel key zurück. Löst einen
KeyErroraus, wenn key nicht in der zugrunde liegenden Zuordnung vorhanden ist.
- iter(proxy)
Gibt einen Iterator über die Schlüssel der zugrunde liegenden Zuordnung zurück. Dies ist eine Abkürzung für
iter(proxy.keys()).
- len(proxy)
Gibt die Anzahl der Elemente in der zugrunde liegenden Zuordnung zurück.
- copy()¶
Gibt eine flache Kopie der zugrunde liegenden Zuordnung zurück.
- get(key[, default])¶
Gibt den Wert für key zurück, wenn key in der zugrunde liegenden Zuordnung vorhanden ist, andernfalls default. Wenn default nicht angegeben ist, ist es standardmäßig
None, so dass diese Methode niemals einenKeyErrorauslöst.
- items()¶
Gibt eine neue Ansicht der Elemente der zugrunde liegenden Zuordnung zurück ((key, value)-Paare).
- keys()¶
Gibt eine neue Ansicht der Schlüssel der zugrunde liegenden Zuordnung zurück.
- values()¶
Gibt eine neue Ansicht der Werte der zugrunde liegenden Zuordnung zurück.
- reversed(proxy)
Gibt einen umgekehrten Iterator über die Schlüssel der zugrunde liegenden Zuordnung zurück.
Hinzugefügt in Version 3.9.
- hash(proxy)
Gibt einen Hash der zugrunde liegenden Zuordnung zurück.
Hinzugefügt in Version 3.12.
- class types.CapsuleType¶
Der Typ von Capsule-Objekten.
Hinzugefügt in Version 3.13.
Zusätzliche Hilfsklassen und Funktionen¶
- class types.SimpleNamespace¶
Eine einfache
object-Unterklasse, die Attributzugriff auf ihren Namensraum sowie eine aussagekräftige Darstellung (repr) bietet.Im Gegensatz zu
objectkönnen Sie mitSimpleNamespaceAttribute hinzufügen und entfernen.SimpleNamespace-Objekte können auf die gleiche Weise wiedictinitialisiert werden: entweder mit Schlüsselwortargumenten, mit einem einzelnen positionsgebundenen Argument oder mit beidem. Wenn mit Schlüsselwortargumenten initialisiert, werden diese direkt dem zugrunde liegenden Namensraum hinzugefügt. Alternativ, wenn mit einem positionsgebundenen Argument initialisiert, wird der zugrunde liegende Namensraum mit Schlüssel-Wert-Paaren aus diesem Argument (entweder ein Zuordnungsobjekt oder ein iterierbares Objekt, das Schlüssel-Wert-Paare liefert) aktualisiert. Alle solchen Schlüssel müssen Zeichenketten sein.Der Typ entspricht ungefähr dem folgenden Code
class SimpleNamespace: def __init__(self, mapping_or_iterable=(), /, **kwargs): self.__dict__.update(mapping_or_iterable) self.__dict__.update(kwargs) def __repr__(self): items = (f"{k}={v!r}" for k, v in self.__dict__.items()) return "{}({})".format(type(self).__name__, ", ".join(items)) def __eq__(self, other): if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace): return self.__dict__ == other.__dict__ return NotImplemented
SimpleNamespacekann als Ersatz fürclass NS: passnützlich sein. Für einen strukturierten Aufzeichnungstyp sollten Sie jedoch stattdessennamedtuple()verwenden.SimpleNamespace-Objekte werden voncopy.replace()unterstützt.Hinzugefügt in Version 3.3.
Geändert in Version 3.9: Die Attributreihenfolge in der Darstellung (repr) änderte sich von alphabetisch zu Einfügung (wie bei
dict).Geändert in Version 3.13: Unterstützung für ein optionales positionsgebundenes Argument hinzugefügt.
- types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)¶
Leitet den Attributzugriff auf eine Klasse an __getattr__ weiter.
Dies ist ein Deskriptor, der verwendet wird, um Attribute zu definieren, die sich unterschiedlich verhalten, wenn sie über eine Instanz und über eine Klasse abgerufen werden. Der Instanzzugriff bleibt normal, aber der Zugriff auf ein Attribut über eine Klasse wird an die __getattr__-Methode der Klasse weitergeleitet; dies geschieht durch Auslösen einer AttributeError.
Dies ermöglicht es, Eigenschaften auf einer Instanz zu haben und virtuelle Attribute auf der Klasse mit demselben Namen zu haben (siehe
enum.Enumals Beispiel).Hinzugefügt in Version 3.4.
Coroutine-Hilfsfunktionen¶
- types.coroutine(gen_func)¶
Diese Funktion wandelt eine Generatorfunktion in eine Koroutinenfunktion um, die eine generatorbasierte Koroutine zurückgibt. Die generatorbasierte Koroutine ist immer noch ein Generator-Iterator, wird aber auch als Koroutine-Objekt betrachtet und ist awaitable. Möglicherweise implementiert sie jedoch nicht notwendigerweise die Methode
__await__().Wenn gen_func eine Generatorfunktion ist, wird sie direkt modifiziert.
Wenn gen_func keine Generatorfunktion ist, wird sie umschlossen. Wenn sie eine Instanz von
collections.abc.Generatorzurückgibt, wird die Instanz in ein awaitable Proxy-Objekt umschlossen. Alle anderen Arten von Objekten werden unverändert zurückgegeben.Hinzugefügt in Version 3.5.