types
— Dynamiskt skapande av typer och namn för inbyggda typer¶
Källkod: Lib/types.py
Denna modul definierar verktygsfunktioner för att underlätta dynamiskt skapande av nya typer.
Den definierar också namn för vissa objekttyper som används av Pythons standardtolk, men som inte exponeras som inbyggda objekt som int
eller str
.
Slutligen innehåller den några ytterligare typrelaterade verktygsklasser och funktioner som inte är tillräckligt grundläggande för att vara inbyggda.
Skapande av dynamisk typ¶
- types.new_class(name, bases=(), kwds=None, exec_body=None)¶
Skapar ett klassobjekt dynamiskt med hjälp av lämplig metaklass.
De tre första argumenten är de komponenter som utgör ett klassdefinitionshuvud: klassnamnet, basklasserna (i ordning), nyckelordsargumenten (t.ex.
metaclass
).Argumentet exec_body är en callback som används för att fylla på den nyss skapade klassnamnrymden. Den bör acceptera klassens namnrymd som sitt enda argument och uppdatera namnrymden direkt med klassens innehåll. Om ingen återuppringning anges har det samma effekt som att skicka in
lambda ns: None
.Tillagd i version 3.3.
- types.prepare_class(name, bases=(), kwds=None)¶
Beräknar lämplig metaklass och skapar klassens namnrymd.
Argumenten är de komponenter som ingår i ett klassdefinitionshuvud: klassnamnet, basklasserna (i ordning) och nyckelordsargumenten (t.ex.
metaclass
).Returvärdet är en 3-tupel:
metaklass, namnrymd, kwds
metaclass är den lämpliga metaklassen, namespace är det förberedda klassnamnrymden och kwds är en uppdaterad kopia av det passerade kwds-argumentet med alla
'metaclass'
-poster borttagna. Om inget kwds-argument skickas in kommer detta att vara en tom dict.Tillagd i version 3.3.
Ändrad i version 3.6: Standardvärdet för
namespace
-elementet i den returnerade tupeln har ändrats. Nu används en mappning som bevarar insättningsordningen när metaklassen inte har någon metod__prepare__
.
Se även
- Metaklasser
Fullständiga detaljer om processen för att skapa klasser med stöd av dessa funktioner
- PEP 3115 - Metaklasser i Python 3000
Införde namnrymdshaken
__prepare__
- types.resolve_bases(bases)¶
Löser MRO-poster dynamiskt enligt specifikationen i PEP 560.
Den här funktionen letar efter objekt i bases som inte är instanser av
type
och returnerar en tupel där varje sådant objekt som har en__mro_entries__()
-metod ersätts med ett uppackat resultat av anropet av den här metoden. Om ett bases-objekt är en instans avtype
, eller om det inte har en__mro_entries__()
-metod, ingår det oförändrat i retur-tupeln.Tillagd i version 3.7.
- types.get_original_bases(cls, /)¶
Returnerar den tupel av objekt som ursprungligen angavs som baser för cls innan metoden
__mro_entries__()
har anropats på några baser (enligt de mekanismer som beskrivs i PEP 560). Detta är användbart för introspektion av Generics.För klasser som har attributet
__orig_bases__
returnerar denna funktion värdet avcls.__orig_bases__
. För klasser utan attributet__orig_bases__
returnerascls.__bases__
.Exempel:
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,)
Tillagd i version 3.12.
Se även
PEP 560 - Kärnstöd för typning av moduler och generiska typer
Standardtolktyper¶
Denna modul ger namn på många av de typer som krävs för att implementera en Python-tolk. Den undviker avsiktligt att inkludera några av de typer som bara uppstår av en slump under bearbetningen, till exempel typen listiterator
.
Typisk användning av dessa namn är för isinstance()
eller issubclass()
kontroller.
Om du instansierar någon av dessa typer, observera att signaturerna kan variera mellan olika Python-versioner.
Standardnamn har definierats för följande typer:
- types.FunctionType¶
- types.LambdaType¶
Typ av användardefinierade funktioner och funktioner som skapas av
lambda
-uttryck.Utlöser en auditing event
function.__new__
med argumentetcode
.Revisionshändelsen inträffar endast vid direkt instansiering av funktionsobjekt och inte vid normal kompilering.
- types.CoroutineType¶
Typ av coroutine-objekt, skapade av
async def
-funktioner.Tillagd i version 3.5.
- types.AsyncGeneratorType¶
Typ av asynkron generator-iteratorobjekt, skapade av asynkrona generatorfunktioner.
Tillagd i version 3.6.
- class types.CodeType(**kwargs)¶
Typen av code objects som t.ex. returneras av
compile()
.Utlöser en auditing-händelse
code.__new__
med argumentencode
,filnamn
,namn
,argcount
,posonlyargcount
,kwonlyargcount
,nlocals
,stacksize
,flags
.Observera att de granskade argumenten kanske inte matchar de namn eller positioner som krävs av initieraren. Granskningshändelsen inträffar endast vid direkt instansiering av kodobjekt och inte vid normal kompilering.
- types.CellType¶
Typen för cellobjekt: sådana objekt används som behållare för en funktions closure variables.
Tillagd i version 3.8.
- types.MethodType¶
Typen av metoder för användardefinierade klassinstanser.
- types.BuiltinFunctionType¶
- types.BuiltinMethodType¶
Typen av inbyggda funktioner som
len()
ellersys.exit()
, och metoder för inbyggda klasser. (Här betyder termen ”inbyggd” ”skriven i C”)
- types.WrapperDescriptorType¶
Typen av metoder för vissa inbyggda datatyper och basklasser, t.ex.
object.__init__()
ellerobject.__lt__()
.Tillagd i version 3.7.
- types.MethodWrapperType¶
Typen av bundna metoder för vissa inbyggda datatyper och basklasser. Det är t.ex. typen av
object().__str__
.Tillagd i version 3.7.
- types.NotImplementedType¶
Typen av
NotImplemented
.Tillagd i version 3.10.
- types.MethodDescriptorType¶
Typen av metoder för vissa inbyggda datatyper, t.ex.
str.join()
.Tillagd i version 3.7.
- types.ClassMethodDescriptorType¶
Typen av obundna klassmetoder för vissa inbyggda datatyper, t.ex.
dict.__dict__['fromkeys']
.Tillagd i version 3.7.
- class types.ModuleType(name, doc=None)¶
Typen av moduler. Konstruktören tar namnet på den modul som ska skapas och eventuellt dess docstring.
Se även
- Dokumentation för modulobjekt
Ger information om de specialattribut som finns på instanser av
ModuleType
.importlib.util.module_from_spec()
Moduler som skapas med hjälp av
ModuleType
-konstruktören skapas med många av sina specialattribut oinställda eller inställda på standardvärden.module_from_spec()
ger ett mer robust sätt att skapaModuleType
-instanser som säkerställer att de olika attributen ställs in på rätt sätt.
- class types.GenericAlias(t_origin, t_args)¶
Typen av parameteriserade generiska såsom
list[int]
.t_origin
skall vara en icke-parameteriserad generisk klass, t.ex.list
,tuple
ellerdict
.t_args
skall vara entuple
(eventuellt av längd 1) av typer som parametriserart_origin
:>>> from types import GenericAlias >>> list[int] == GenericAlias(list, (int,)) True >>> dict[str, int] == GenericAlias(dict, (str, int)) True
Tillagd i version 3.9.
Ändrad i version 3.9.2: Denna typ kan nu underklassificeras.
Se även
- Generiska alias-typer
Fördjupad dokumentation av instanser av
types.GenericAlias
- PEP 585 - Typhintning av generiska i standardsamlingar
Vi introducerar
types.GenericAlias
-klassen
- class types.UnionType¶
Typen av unionstyputtryck.
Tillagd i version 3.10.
Ändrad i version 3.14: Detta är nu ett alias för
typing.Union
.
- class types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)¶
Typen av spårningsobjekt som finns i
sys.exception().__traceback__
.Se språkreferensen för mer information om tillgängliga attribut och operationer samt vägledning om hur man skapar dynamiska spårningar.
- types.FrameType¶
Typen av frame objects som finns i
tb.tb_frame
omtb
är ett traceback-objekt.
- types.GetSetDescriptorType¶
Typen av objekt som definieras i tilläggsmoduler med
PyGetSetDef
, t.ex.FrameType.f_locals
ellerarray.array.typecode
. Den här typen används som deskriptor för objektattribut; den har samma syfte som typenproperty
, men för klasser som definieras i tilläggsmoduler.
- types.MemberDescriptorType¶
Typen av objekt som definieras i tilläggsmoduler med
PyMemberDef
, t.ex.datetime.timedelta.days
. Den här typen används som deskriptor för enkla C-datamedlemmar som använder standardkonverteringsfunktioner; den har samma syfte som typenproperty
, men för klasser som definieras i tilläggsmoduler.Dessutom, när en klass definieras med attributet
__slots__
, kommer en instans avMemberDescriptorType
att läggas till som attribut för varje slot i klassen. Detta gör att platsen kan visas i klassens__dict__
.I andra implementationer av Python kan denna typ vara identisk med
GetSetDescriptorType
.
- class types.MappingProxyType(mapping)¶
Skrivskyddad proxy för en mappning. Den ger en dynamisk vy över mappningens poster, vilket innebär att när mappningen ändras återspeglas dessa ändringar i vyn.
Tillagd i version 3.3.
Ändrad i version 3.9: Uppdaterad för att stödja den nya operatorn union (
|
) från PEP 584, som helt enkelt delegerar till den underliggande mappningen.- key in proxy
Returnerar
True
om den underliggande mappningen har en nyckel key, annarsFalse
.
- proxy[key]
Returnerar objektet i den underliggande mappningen med nyckel key. Utlöser ett
KeyError
om key inte finns i den underliggande mappningen.
- iter(proxy)
Returnerar en iterator över nycklarna i den underliggande mappningen. Detta är en genväg till
iter(proxy.keys())
.
- len(proxy)
Returnerar antalet objekt i den underliggande mappningen.
- copy()¶
Returnerar en ytlig kopia av den underliggande mappningen.
- get(key[, default])¶
Returnerar värdet för key om key finns i den underliggande mappningen, annars default. Om default inte anges är standardvärdet
None
, så att den här metoden aldrig ger upphov till ettKeyError
.
- items()¶
Returnerar en ny vy av den underliggande mappningens objekt (par av typen
(nyckel, värde)
).
- keys()¶
Returnerar en ny vy av den underliggande mappningens nycklar.
- values()¶
Returnerar en ny vy av den underliggande mappningens värden.
- reversed(proxy)
Returnerar en omvänd iterator över nycklarna i den underliggande mappningen.
Tillagd i version 3.9.
- hash(proxy)
Returnerar en hash av den underliggande mappningen.
Tillagd i version 3.12.
- class types.CapsuleType¶
Typ av kapselobjekt.
Tillagd i version 3.13.
Ytterligare verktygsklasser och funktioner¶
- class types.SimpleNamespace¶
En enkel
object
-underklass som ger attributåtkomst till dess namnrymd, samt en meningsfull repr.Till skillnad från
object
kan du medSimpleNamespace
lägga till och ta bort attribut.SimpleNamespace
-objekt kan initieras på samma sätt somdict
: antingen med nyckelordsargument, med ett enda positionellt argument eller med båda. När de initieras med nyckelordsargument läggs de direkt till i den underliggande namnrymden. Alternativt, när den initieras med ett positionellt argument, kommer den underliggande namnrymden att uppdateras med nyckel-värde-par från det argumentet (antingen ett mappningsobjekt eller ett iterable-objekt som producerar nyckel-värde-par). Alla sådana nycklar måste vara strängar.Typen motsvarar ungefär följande kod:
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
SimpleNamespace
kan vara användbart som ersättning förclass NS: pass
. Men för en strukturerad posttyp användnamedtuple()
istället.SimpleNamespace
-objekt stöds avcopy.replace()
.Tillagd i version 3.3.
Ändrad i version 3.9: Attributordningen i repr ändrades från alfabetisk till insertion (som
dict
).Ändrad i version 3.13: Stöd för ett valfritt positionellt argument har lagts till.
- types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)¶
Dirigera attributåtkomst för en klass till __getattr__.
Detta är en deskriptor som används för att definiera attribut som fungerar olika när de nås via en instans och via en klass. Instansåtkomst förblir normal, men åtkomst till ett attribut via en klass kommer att dirigeras till klassens __getattr__-metod; detta görs genom att AttributeError utlöses.
Detta gör att man kan ha egenskaper aktiva på en instans och ha virtuella attribut på klassen med samma namn (se
enum.Enum
för ett exempel).Tillagd i version 3.4.
Verktygsfunktioner för Coroutine¶
- types.coroutine(gen_func)¶
Denna funktion omvandlar en generator-funktion till en coroutine-funktion som returnerar en generatorbaserad coroutine. Den generatorbaserade coroutinen är fortfarande en generator iterator, men anses också vara ett coroutine-objekt och är awaitable. Den behöver dock inte nödvändigtvis implementera metoden
__await__()
.Om gen_func är en generatorfunktion kommer den att modifieras på plats.
Om gen_func inte är en generatorfunktion kommer den att paketeras. Om den returnerar en instans av
collections.abc.Generator
, kommer instansen att packas in i ett awaitable proxyobjekt. Alla andra typer av objekt kommer att returneras som de är.Tillagd i version 3.5.