types
— Δημιουργία δυναμικών τύπων και ονόματα για ενσωματωμένους τύπους¶
Πηγαίος κώδικας: Lib/types.py
Αυτό το module ορίζει συναρτήσεις βοηθητικού προγράμματος για να διευκολύνει τη δυναμική δημιουργία νέων τύπων.
Ορίζει επίσης ονόματα για κάποιους τύπους αντικειμένων που χρησιμοποιούνται από τον τυπικό διερμηνέα Python, αλλά δεν εκτίθενται ως ενσωματωμένα όπως οι int
ή str
.
Τέλος, παρέχει κάποιες πρόσθετες κλάσεις και συναρτήσεις σχετικές με τους τύπους που δεν είναι αρκετά θεμελιώδεις ώστε να είναι ενσωματωμένες.
Δημιουργία Δυναμικών Τύπων¶
- types.new_class(name, bases=(), kwds=None, exec_body=None)¶
Δημιουργεί ένα αντικείμενο κλάσης δυναμικά χρησιμοποιώντας την κατάλληλη μετακλάση.
Τα τρία πρώτα ορίσματα είναι τα στοιχεία που αποτελούν την επικεφαλίδα του ορισμού κλάσης: το όνομα της κλάσης, οι βάσεις κλάσης (με τη σειρά), τα ορίσματα λέξεων-κλειδιών (όπως
metaclass
).Το όρισμα exec_body είναι μια συνάρτηση που χρησιμοποιείται για να γεμίσει το φρέσκο δημιουργημένο namespace κλάσης. Πρέπει να δέχεται το namespace της κλάσης ως μοναδικό όρισμα και να ενημερώνει άμεσα το namespace με τα περιεχόμενα της κλάσης. Αν δεν παρέχεται καμία συνάρτηση, έχει το ίδιο αποτέλεσμα με την παράδοση
lambda ns: None
.Added in version 3.3.
- types.prepare_class(name, bases=(), kwds=None)¶
Υπολογίζει την κατάλληλη μετακλάση και δημιουργεί το namespace της κλάσης.
Τα ορίσματα είναι τα στοιχεία που αποτελούν την επικεφαλίδα του ορισμού κλάσης: το όνομα της κλάσης, οι βάσεις κλάσης (με τη σειρά) και τα ορίσματα λέξεων-κλειδιών (όπως
metaclass
).Η επιστρεφόμενη τιμή είναι μια 3-πλειάδα:
metaclass, namespace, kwds
metaclass είναι η κατάλληλη μετακλάση, namespace είναι το προετοιμασμένο namespace κλάσης και kwds είναι μια ενημερωμένη αντιγραφή του περασμένου ορίσματος kwds με οποιαδήποτε είσοδο
'metaclass'
αφαιρεθεί. Αν δεν περαστεί κανένα όρισμα kwds, αυτό θα είναι ένα κενό dict.Added in version 3.3.
Άλλαξε στην έκδοση 3.6: Η προεπιλεγμένη τιμή για το στοιχείο
namespace
της επιστρεφόμενης πλειάδας έχει αλλάξει. Τώρα χρησιμοποιείται μια χαρτογράφηση που διατηρεί τη σειρά εισαγωγής όταν η μετακλάση δεν έχει μέθοδο__prepare__
.
Δείτε επίσης
- Metaclasses
Πλήρεις λεπτομέρειες της διαδικασίας δημιουργίας κλάσης που υποστηρίζεται από αυτές τις συναρτήσεις
- PEP 3115 - Μετακλάσεις στην Python 3000
Εισήγαγε το hook namespace
__prepare__
- types.resolve_bases(bases)¶
Επιλύει τις καταχωρήσεις MRO δυναμικά όπως καθορίζεται από την PEP 560.
Αυτή η συνάρτηση αναζητά στοιχεία στις bases που δεν είναι στιγμιότυπα της
type
, και επιστρέφει μια πλειάδα όπου κάθε τέτοιο αντικείμενο που έχει μια μέθοδο__mro_entries__()
αντικαθίσταται με ένα αποσυσκευασμένο αποτέλεσμα της κλήσης αυτής της μεθόδου. Αν ένα στοιχείο bases είναι στιγμιότυπο τηςtype
, ή δεν έχει μια μέθοδο__mro_entries__()
, τότε περιλαμβάνεται στην επιστρεφόμενη πλειάδα χωρίς αλλαγές.Added in version 3.7.
- types.get_original_bases(cls, /)¶
Επιστρέφει την πλειάδα αντικειμένων που δόθηκαν αρχικά ως βάσεις του cls πριν κληθεί η μέθοδος
__mro_entries__()
σε οποιαδήποτε βάση (ακολουθώντας τους μηχανισμούς που καθορίζονται στην PEP 560). Αυτό είναι χρήσιμο για την ανάλυση των Generics.Για κλάσεις που έχουν ένα χαρακτηριστικό
__orig_bases__
, αυτή η συνάρτηση επιστρέφει την τιμή τουcls.__orig_bases__
. Για κλάσεις χωρίς το χαρακτηριστικό__orig_bases__
, επιστρέφεταιcls.__bases__
.Παραδείγματα:
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,)
Added in version 3.12.
Δείτε επίσης
PEP 560 - Βασική υποστήριξη για το module typing και γενικούς τύπους
Τυπικοί Τύποι Διερμηνέα¶
Αυτό το module παρέχει ονόματα για πολλούς από τους τύπους που απαιτούνται για να υλοποιηθεί ένας διερμηνέας Python. Αποφεύγει σκόπιμα να συμπεριλάβει κάποιους από τους τύπους που προκύπτουν μόνο παρεμπιπτόντως κατά τη διάρκεια της επεξεργασίας, όπως ο τύπος listiterator
.
Τυπική χρήση αυτών των ονομάτων είναι για ελέγχους isinstance()
ή issubclass()
.
Αν δημιουργήσετε στιγμιότυπα από αυτούς τους τύπους, σημειώστε ότι οι υπογραφές μπορεί να διαφέρουν μεταξύ εκδόσεων Python.
Τυπικά ονόματα ορίζονται για τους παρακάτω τύπους:
- types.FunctionType¶
- types.LambdaType¶
Ο τύπος των συναρτήσεων που ορίζονται από τον χρήστη και των συναρτήσεων που δημιουργούνται από εκφράσεις
lambda
.Κάνει raise ένα auditing event
function.__new__
με το όρισμαcode
.Το audit event συμβαίνει μόνο για άμεσες δημιουργίες αντικειμένων συναρτήσεων και δεν γίνεται raise κατά τη διάρκεια της κανονικής μεταγλώττισης.
- types.GeneratorType¶
Ο τύπος των αντικειμένων generator-iterator, που δημιουργούνται από συναρτήσεις γεννητριών.
- types.CoroutineType¶
Ο τύπος των αντικειμένων coroutine, που δημιουργούνται από συναρτήσεις
async def
.Added in version 3.5.
- types.AsyncGeneratorType¶
Ο τύπος των αντικειμένων asynchronous generator-iterator, που δημιουργούνται από ασύγχρονες συναρτήσεις γεννητριών.
Added in version 3.6.
- class types.CodeType(**kwargs)¶
Ο τύπος των code objects όπως επιστρέφεται από τη
compile()
.Κάνει raise ένα auditing event
code.__new__
με τα ορίσματαcode
,filename
,name
,argcount
,posonlyargcount
,kwonlyargcount
,nlocals
,stacksize
,flags
.Σημειώστε ότι τα ελεγχόμενα ορίσματα μπορεί να μην ταιριάζουν με τα ονόματα ή τις θέσεις που απαιτούνται από τον αρχικοποιητή. Το audit event συμβαίνει μόνο για άμεσες δημιουργίες αντικειμένων κώδικα και δεν γίνεται raise κατά τη διάρκεια της κανονικής μεταγλώττισης.
- types.CellType¶
Ο τύπος για τα αντικείμενα κελιών: τέτοια αντικείμενα χρησιμοποιούνται ως δοχεία για τις closure variables μιας συνάρτησης.
Added in version 3.8.
- types.MethodType¶
Ο τύπος των μεθόδων των στιγμιοτύπων κλάσεων που ορίζονται από τον χρήστη.
- types.BuiltinFunctionType¶
- types.BuiltinMethodType¶
Ο τύπος των ενσωματωμένων συναρτήσεων όπως
len()
ήsys.exit()
, και μεθόδων ενσωματωμένων κλάσεων. (Εδώ, ο όρος «built-in» σημαίνει «γραμμένος σε C».)
- types.WrapperDescriptorType¶
Ο τύπος των μεθόδων κάποιων ενσωματωμένων τύπων δεδομένων και βάσεων κλάσεων όπως
object.__init__()
ήobject.__lt__()
.Added in version 3.7.
- types.MethodWrapperType¶
Ο τύπος των bound μεθόδων κάποιων ενσωματωμένων τύπων δεδομένων και βάσεων κλάσεων. Για παράδειγμα είναι ο τύπος του
object().__str__
.Added in version 3.7.
- types.NotImplementedType¶
Ο τύπος του
NotImplemented
.Added in version 3.10.
- types.MethodDescriptorType¶
Ο τύπος των μεθόδων κάποιων ενσωματωμένων τύπων δεδομένων όπως
str.join()
.Added in version 3.7.
- types.ClassMethodDescriptorType¶
Ο τύπος των unbound μεθόδων κλάσης κάποιων ενσωματωμένων τύπων δεδομένων όπως
dict.__dict__['fromkeys']
.Added in version 3.7.
- class types.ModuleType(name, doc=None)¶
Ο τύπος των modules. Ο κατασκευαστής δέχεται το όνομα του module που θα δημιουργηθεί και προαιρετικά την docstring του.
Δείτε επίσης
- Documentation on module objects
Παρέχει λεπτομέρειες για τα ειδικά χαρακτηριστικά που μπορούν να βρεθούν σε στιγμιότυπα της
ModuleType
.importlib.util.module_from_spec()
Τα modules που δημιουργούνται χρησιμοποιώντας τον κατασκευαστή
ModuleType
δημιουργούνται με πολλά από τα ειδικά χαρακτηριστικά τους μη ρυθμισμένα ή ρυθμισμένα σε προεπιλεγμένες τιμές. Ηmodule_from_spec()
παρέχει έναν πιο ανθεκτικό τρόπο δημιουργίας στιγμιοτύπωνModuleType
που διασφαλίζει ότι τα διάφορα χαρακτηριστικά είναι ρυθμισμένα κατάλληλα.
- class types.GenericAlias(t_origin, t_args)¶
O τύπος των parameterized generics όπως το
list[int]
.t_origin
θα πρέπει να είναι μια μη παραμετροποιημένη γενική κλάση, όπωςlist
,tuple
ήdict
.t_args
θα πρέπει να είναι μιαtuple
(πιθανώς μήκους 1) τύπων που παραμετροποιούν τοt_origin
:>>> from types import GenericAlias >>> list[int] == GenericAlias(list, (int,)) True >>> dict[str, int] == GenericAlias(dict, (str, int)) True
Added in version 3.9.
Άλλαξε στην έκδοση 3.9.2: Αυτός ο τύπος μπορεί πλέον να κληρονομείται.
Δείτε επίσης
- Generic Alias Types
Λεπτομερής τεκμηρίωση για τα στιγμιότυπα της
types.GenericAlias
- PEP 585 - Υποδείξεις τύπου Generics σε τυπικές συλλογές
Εισαγωγή στην κλάση
types.GenericAlias
- class types.UnionType¶
Ο τύπος των union type expressions.
Added in version 3.10.
Άλλαξε στην έκδοση 3.14: Αυτό είναι τώρα ένα ψευδώνυμο για την κλάση
typing.Union
.
- class types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)¶
Ο τύπος των αντικειμένων traceback όπως αυτά που βρίσκονται στο
sys.exception().__traceback__
.Δείτε the language reference για λεπτομέρειες σχετικά με τα διαθέσιμα χαρακτηριστικά και τις λειτουργίες, καθώς και οδηγίες για τη δυναμική δημιουργία tracebacks.
- types.FrameType¶
Ο τύπος των frame objects όπως αυτά που βρίσκονται στο
tb.tb_frame
αν τοtb
είναι ένα αντικείμενο traceback.
- types.GetSetDescriptorType¶
Ο τύπος των αντικειμένων που ορίζονται σε επεκτάσιμα modules με
PyGetSetDef
, όπωςFrameType.f_locals
ήarray.array.typecode
. Αυτός ο τύπος χρησιμοποιείται ως περιγραφέας για τα χαρακτηριστικά του αντικειμένου. Έχει τον ίδιο σκοπό με τον τύποproperty
, αλλά για κλάσεις που ορίζονται σε επεκτάσιμα modules.
- types.MemberDescriptorType¶
Ο τύπος των αντικειμένων που ορίζονται σε επεκτάσιμα modules με
PyMemberDef
, όπως τοdatetime.timedelta.days
. Αυτός ο τύπος χρησιμοποιείται ως περιγραφέας για απλά μέλη δεδομένων C που χρησιμοποιούν τυπικές συναρτήσεις μετατροπής. Έχει τον ίδιο σκοπό με τον τύποproperty
, αλλά για κλάσεις που ορίζονται σε επεκτάσιμα modules.Επιπλέον, όταν μια κλάση ορίζεται με ένα χαρακτηριστικό
__slots__
, τότε για κάθε slot, θα προστεθεί ένα στιγμιότυπο τηςMemberDescriptorType
ως χαρακτηριστικό στην κλάση. Αυτό επιτρέπει στο slot να εμφανίζεται στο__dict__
της κλάσης.Σε άλλες υλοποιήσεις της Python, αυτός ο τύπος μπορεί να είναι ταυτόσημος με το
GetSetDescriptorType
.
- class types.MappingProxyType(mapping)¶
Read-only αναγνωριστικό για μια αντιστοίχιση. Παρέχει μια δυναμική προβολή στις καταχωρήσεις της αντιστοίχισης, που σημαίνει ότι όταν η αντιστοίχιση αλλάζει, η προβολή αντικατοπτρίζει αυτές τις αλλαγές.
Added in version 3.3.
Άλλαξε στην έκδοση 3.9: Ενημερώθηκε για να υποστηρίζει τον νέο τελεστή ένωσης (
|
) από την PEP 584, ο οποίος απλά αναθέτει στην υποκείμενη αντιστοίχιση.- key in proxy
Επιστρέφει
True
αν η υποκείμενη αντιστοίχιση έχει το κλειδί key, αλλιώςFalse
.
- proxy[key]
Επιστρέφει το στοιχείο της υποκείμενης αντιστοίχισης με το κλειδί key. Κάνει raise μια
KeyError
αν το key δεν είναι στην υποκείμενη αντιστοίχιση.
- iter(proxy)
Επιστρέφει έναν iterator πάνω από τα κλειδιά της υποκείμενης αντιστοίχισης. Αυτό είναι μια συντόμευση για
iter(proxy.keys())
.
- len(proxy)
Επιστρέφει τον αριθμό των στοιχείων στην υποκείμενη αντιστοίχιση.
- copy()¶
Επιστρέφει ένα ρηχό αντίγραφο της υποκείμενης αντιστοίχισης.
- get(key[, default])¶
Επιστρέφει την τιμή για το key αν το key είναι στην υποκείμενη αντιστοίχιση, αλλιώς default. Αν το default δεν δοθεί, προεπιλέγεται σε
None
, έτσι ώστε αυτή η μέθοδος να μην κάνει ποτέ raise μιαKeyError
.
- items()¶
Επιστρέφει μια νέα προβολή των στοιχείων της υποκείμενης αντιστοίχισης (ζεύγη
(key, value)
).
- keys()¶
Επιστρέφει μια νέα προβολή των κλειδιών της υποκείμενης αντιστοίχισης.
- values()¶
Επιστρέφει μια νέα προβολή των τιμών της υποκείμενης αντιστοίχισης.
- reversed(proxy)
Επιστρέφει έναν αντίστροφο iterator πάνω από τα κλειδιά της υποκείμενης αντιστοίχισης.
Added in version 3.9.
- hash(proxy)
Επιστρέφει ένα hash της υποκείμενης αντιστοίχισης.
Added in version 3.12.
- class types.CapsuleType¶
Ο τύπος των capsule objects.
Added in version 3.13.
Πρόσθετες βοηθητικές κλάσεις και συναρτήσεις¶
- class types.SimpleNamespace¶
Απλή υποκλάση
object
που παρέχει πρόσβαση χαρακτηριστικών στο χώρο ονομάτων της, καθώς και μια σημαντική αναπαράσταση.Σε αντίθεση με την
object
, με τηνSimpleNamespace
μπορείτε να προσθέσετε και να αφαιρέσετε χαρακτηριστικά.Τα αντικείμενα
SimpleNamespace
μπορούν να αρχικοποιηθούν με τον ίδιο τρόπο όπως ηdict
: είτε με ονόματα χαρακτηριστικών, είτε με ένα μόνο οριστικό όρισμα, είτε και με τα δύο. Όταν αρχικοποιούνται με ονόματα χαρακτηριστικών, αυτά προστίθενται απευθείας στο υποκείμενο χώρο ονομάτων. Εναλλακτικά, όταν αρχικοποιούνται με ένα οριστικό όρισμα, το υποκείμενο χώρο ονομάτων θα ενημερωθεί με ζεύγη κλειδιού-τιμής από αυτό το όρισμα (είτε ένα αντικείμενο αντιστοίχισης είτε ένα iterable αντικείμενο που παράγει ζεύγη κλειδιού-τιμής). Όλα αυτά τα κλειδιά πρέπει να είναι συμβολοσειρές.Ο τύπος είναι περίπου ισοδύναμος με τον παρακάτω κώδικα:
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
μπορεί να είναι χρήσιμο ως αντικατάσταση για τοclass NS: pass
. Ωστόσο, για έναν δομημένο τύπο εγγραφής χρησιμοποιήστεnamedtuple()
αντί αυτού.SimpleNamespace
αντικείμενα υποστηρίζονται από τηνcopy.replace()
.Added in version 3.3.
Άλλαξε στην έκδοση 3.9: Η σειρά των χαρακτηριστικών στην αναπαράσταση άλλαξε από αλφαβητική σε εισαγωγή (όπως το
dict
).Άλλαξε στην έκδοση 3.13: Προστέθηκε υποστήριξη για ένα προαιρετικό οριστικό όρισμα.
- types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)¶
Δρομολόγηση πρόσβασης χαρακτηριστικών σε μια κλάση στο __getattr__.
Αυτός είναι ένας περιγραφέας, που χρησιμοποιείται για τον ορισμό χαρακτηριστικών που δρουν διαφορετικά όταν προσπελάζονται μέσω ενός στιγμιότυπου και μέσω μιας κλάσης. Η πρόσβαση στο στιγμιότυπο παραμένει κανονική, αλλά η πρόσβαση σε ένα χαρακτηριστικό μέσω μιας κλάσης θα δρομολογηθεί στη μέθοδο __getattr__ της κλάσης. Αυτό γίνεται κάνοντας raise ένα AttributeError.
Αυτό επιτρέπει να έχετε ιδιότητες ενεργές σε ένα στιγμιότυπο και να έχετε εικονικά χαρακτηριστικά στην κλάση με το ίδιο όνομα (βλ.
enum.Enum
για παράδειγμα).Added in version 3.4.
Βοηθητικές Συναρτήσεις Coroutine¶
- types.coroutine(gen_func)¶
Αυτή η συνάρτηση μετατρέπει μια generator συνάρτηση σε μια coroutine function που επιστρέφει μια coroutine βασισμένη σε γεννήτρια. Η coroutine βασισμένη σε γεννήτρια είναι ακόμα ένας generator iterator, αλλά θεωρείται επίσης ότι είναι ένα αντικείμενο coroutine και είναι awaitable. Ωστόσο, δεν είναι απαραίτητο να υλοποιεί τη μέθοδο
__await__()
.Αν το gen_func είναι μια γεννήτρια συνάρτηση, θα τροποποιηθεί επιτόπου.
Αν το gen_func δεν είναι μια γεννήτρια συνάρτηση, θα τυλιχθεί. Αν επιστρέφει μια παρουσία της
collections.abc.Generator
, το στιγμιότυπο θα τυλιχθεί σε ένα awaitable αντικείμενο proxy. Όλοι οι άλλοι τύποι αντικειμένων θα επιστραφούν όπως είναι.Added in version 3.5.