types --- Tạo kiểu động và đặt tên cho các kiểu có sẵn¶
Source code: Lib/types.py
Mô-đun này xác định các chức năng tiện ích để hỗ trợ việc tạo động các loại mới.
Nó cũng xác định tên cho một số loại đối tượng được trình thông dịch Python tiêu chuẩn sử dụng, nhưng không được hiển thị dưới dạng nội trang như int hoặc str.
Cuối cùng, nó cung cấp một số lớp và hàm tiện ích liên quan đến loại bổ sung nhưng không đủ cơ bản để trở thành nội dung.
Tạo kiểu động¶
- types.new_class(name, bases=(), kwds=None, exec_body=None)¶
Tạo một đối tượng lớp một cách linh hoạt bằng cách sử dụng siêu dữ liệu thích hợp.
Ba đối số đầu tiên là các thành phần tạo nên tiêu đề định nghĩa lớp: tên lớp, các lớp cơ sở (theo thứ tự), các đối số từ khóa (chẳng hạn như
metaclass).Đối số exec_body là một lệnh gọi lại được sử dụng để điền vào không gian tên lớp mới được tạo. Nó phải chấp nhận không gian tên lớp làm đối số duy nhất và cập nhật không gian tên trực tiếp với nội dung lớp. Nếu không có lệnh gọi lại nào được cung cấp, nó có tác dụng tương tự như truyền vào
lambda ns: None.Added in version 3.3.
- types.prepare_class(name, bases=(), kwds=None)¶
Tính toán siêu dữ liệu thích hợp và tạo không gian tên lớp.
Các đối số là các thành phần tạo nên tiêu đề định nghĩa lớp: tên lớp, các lớp cơ sở (theo thứ tự) và các đối số từ khóa (chẳng hạn như
metaclass).Giá trị trả về là 3 bộ:
metaclass, namespace, kwdsmetaclass là siêu dữ liệu thích hợp, namespace là không gian tên lớp được chuẩn bị sẵn và kwds là bản sao cập nhật của đối số được truyền trong kwds với mọi mục nhập
'metaclass'đã bị xóa. Nếu không có đối số kwds nào được truyền vào thì đây sẽ là một lệnh trống.Added in version 3.3.
Thay đổi trong phiên bản 3.6: Giá trị mặc định cho phần tử
namespacecủa bộ dữ liệu trả về đã thay đổi. Giờ đây, ánh xạ bảo toàn thứ tự chèn được sử dụng khi siêu dữ liệu không có phương thức__prepare__.
Xem thêm
- types.resolve_bases(bases)¶
Giải quyết các mục nhập MRO một cách linh hoạt theo chỉ định của PEP 560.
Hàm này tìm kiếm các mục trong bases không phải là phiên bản của
typevà trả về một bộ dữ liệu trong đó mỗi đối tượng có phương thức__mro_entries__()được thay thế bằng kết quả đã giải nén khi gọi phương thức này. Nếu một mục bases là một phiên bản củatypehoặc nó không có phương thức__mro_entries__()thì nó sẽ được đưa vào bộ dữ liệu trả về không thay đổi.Added in version 3.7.
- types.get_original_bases(cls, /)¶
Trả về bộ đối tượng ban đầu được cung cấp dưới dạng cơ sở của cls trước khi phương thức
__mro_entries__()được gọi trên bất kỳ cơ sở nào (theo các cơ chế được trình bày trong PEP 560). Điều này rất hữu ích cho việc xem xét nội tâm Generics.Đối với các lớp có thuộc tính
__orig_bases__, hàm này trả về giá trịcls.__orig_bases__. Đối với các lớp không có thuộc tính__orig_bases__,cls.__bases__sẽ được trả về.Ví dụ:
từ cách nhập nhập TypeVar, Generic, NamedTuple, TypedDict T = TypeVar("T") lớp Foo(Chung[T]): ... lớp Bar(Foo[int], float): ... lớp Baz(danh sách[str]): ... Trứng = NamedTuple("Trứng", [("a", int), ("b", str)]) Thư rác = TypedDict("Thư rác", {"a": int, "b": str}) khẳng định Bar.__bases__ == (Foo, float) khẳng định get_origin_base(Bar) == (Foo[int], float) khẳng định Baz.__bases__ == (danh sách,) khẳng định get_origin_base(Baz) == (list[str],) khẳng định Eggs.__bases__ == (tuple,) khẳng định get_origin_base(Eggs) == (NamedTuple,) khẳng định Spam.__bases__ == (dict,) khẳng định get_origin_base(Spam) == (TypedDict,) khẳng định int.__bases__ == (đối tượng,) khẳng định get_origin_base(int) == (object,)
Added in version 3.12.
Xem thêm
PEP 560 - Hỗ trợ cốt lõi cho mô-đun gõ và các loại chung
Các loại thông dịch viên tiêu chuẩn¶
Mô-đun này cung cấp tên cho nhiều loại cần thiết để triển khai trình thông dịch Python. Nó cố tình tránh bao gồm một số loại chỉ phát sinh ngẫu nhiên trong quá trình xử lý, chẳng hạn như loại listiterator.
Việc sử dụng điển hình của những tên này là để kiểm tra isinstance() hoặc issubclass().
Nếu bạn khởi tạo bất kỳ loại nào trong số này, hãy lưu ý rằng chữ ký có thể khác nhau giữa các phiên bản Python.
Tên tiêu chuẩn được xác định cho các loại sau:
- types.FunctionType¶
- types.LambdaType¶
Loại hàm do người dùng định nghĩa và hàm được tạo bởi biểu thức
lambda.Tăng một auditing event
function.__new__với đối sốcode.Sự kiện kiểm tra chỉ xảy ra để khởi tạo trực tiếp các đối tượng hàm và không được đưa ra để biên dịch thông thường.
- types.CoroutineType¶
Loại đối tượng coroutine, được tạo bởi các hàm
async def.Added in version 3.5.
- types.AsyncGeneratorType¶
Loại đối tượng asynchronous generator-iterator, được tạo bởi các hàm tạo không đồng bộ.
Added in version 3.6.
- class types.CodeType(**kwargs)¶
Loại code objects được trả về bởi
compile().Tăng một auditing event
code.__new__với các đối sốcode,filename,name,argcount,posonlyargcount,kwonlyargcount,nlocals,stacksize,flags.Lưu ý rằng các đối số được kiểm tra có thể không khớp với tên hoặc vị trí mà trình khởi tạo yêu cầu. Sự kiện kiểm tra chỉ xảy ra để khởi tạo trực tiếp các đối tượng mã và không được đưa ra để biên dịch thông thường.
- types.CellType¶
Loại dành cho đối tượng ô: các đối tượng như vậy được sử dụng làm vùng chứa cho closure variables của hàm.
Added in version 3.8.
- types.MethodType¶
Loại phương thức của các thể hiện của lớp do người dùng định nghĩa.
- types.BuiltinFunctionType¶
- types.BuiltinMethodType¶
Loại hàm dựng sẵn như
len()hoặcsys.exit()và các phương thức của các lớp dựng sẵn. (Ở đây, thuật ngữ "tích hợp" có nghĩa là "được viết bằng C".)
- types.WrapperDescriptorType¶
Kiểu phương thức của một số kiểu dữ liệu tích hợp và lớp cơ sở như
object.__init__()hoặcobject.__lt__().Added in version 3.7.
- types.MethodWrapperType¶
Kiểu phương thức bound của một số kiểu dữ liệu và lớp cơ sở tích hợp. Ví dụ đó là loại
object().__str__.Added in version 3.7.
- types.NotImplementedType¶
Loại
NotImplemented.Added in version 3.10.
- types.MethodDescriptorType¶
Kiểu phương thức của một số kiểu dữ liệu có sẵn như
str.join().Added in version 3.7.
- types.ClassMethodDescriptorType¶
Kiểu phương thức lớp unbound của một số kiểu dữ liệu tích hợp như
dict.__dict__['fromkeys'].Added in version 3.7.
- class types.ModuleType(name, doc=None)¶
Loại modules. Hàm tạo lấy tên của mô-đun sẽ được tạo và tùy chọn docstring của nó.
Xem thêm
- Documentation on module objects
Cung cấp thông tin chi tiết về các thuộc tính đặc biệt có thể tìm thấy trên các phiên bản của
ModuleType.importlib.util.module_from_spec()Các mô-đun được tạo bằng hàm tạo
ModuleTypeđược tạo với nhiều thuộc tính đặc biệt của chúng không được đặt hoặc đặt thành giá trị mặc định.module_from_spec()cung cấp một cách mạnh mẽ hơn để tạo các phiên bảnModuleTypenhằm đảm bảo các thuộc tính khác nhau được đặt phù hợp.
- class types.GenericAlias(t_origin, t_args)¶
Các loại parameterized generics như
list[int].t_originphải là lớp chung không có tham số, chẳng hạn nhưlist,tuplehoặcdict.t_argsphải là loạituple(có thể có độ dài 1) tham số hóat_origin:>>> từ các loại nhập GenericAlias >>> list[int] == GenericAlias(list, (int,)) đúng >>> dict[str, int] == GenericAlias(dict, (str, int)) đúng
Added in version 3.9.
Thay đổi trong phiên bản 3.9.2: Loại này bây giờ có thể được phân lớp.
Xem thêm
- Generic Alias Types
Tài liệu chuyên sâu về các phiên bản của
types.GenericAlias- PEP 585 - Gõ Generics gợi ý trong bộ sưu tập tiêu chuẩn
Giới thiệu lớp
types.GenericAlias
- class types.UnionType¶
Loại union type expressions.
Added in version 3.10.
Thay đổi trong phiên bản 3.14: Đây hiện là bí danh của
typing.Union.
- class types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)¶
Loại đối tượng truy nguyên như được tìm thấy trong
sys.exception().__traceback__.Xem the language reference để biết chi tiết về các thuộc tính và hoạt động có sẵn cũng như hướng dẫn về cách tạo dấu vết ngược một cách linh hoạt.
- types.FrameType¶
Loại frame objects như được tìm thấy trong
tb.tb_framenếutblà đối tượng truy nguyên.
- types.GetSetDescriptorType¶
Loại đối tượng được xác định trong mô-đun mở rộng với
PyGetSetDef, chẳng hạn nhưFrameType.f_localshoặcarray.array.typecode. Kiểu này được sử dụng làm mô tả cho các thuộc tính đối tượng; nó có cùng mục đích với loạiproperty, nhưng dành cho các lớp được xác định trong mô-đun mở rộng.
- types.MemberDescriptorType¶
Loại đối tượng được xác định trong mô-đun mở rộng với
PyMemberDef, chẳng hạn nhưdatetime.timedelta.days. Loại này được sử dụng làm bộ mô tả cho các thành viên dữ liệu C đơn giản sử dụng các hàm chuyển đổi tiêu chuẩn; nó có cùng mục đích với loạiproperty, nhưng dành cho các lớp được xác định trong mô-đun mở rộng.Ngoài ra, khi một lớp được xác định bằng thuộc tính
__slots__thì đối với mỗi vị trí, một phiên bảnMemberDescriptorTypesẽ được thêm làm thuộc tính trên lớp. Điều này cho phép vị trí xuất hiện trong__dict__của lớp.Trong các triển khai Python khác, loại này có thể giống với
GetSetDescriptorType.
- class types.MappingProxyType(mapping)¶
Proxy chỉ đọc của ánh xạ. Nó cung cấp chế độ xem động trên các mục của ánh xạ, có nghĩa là khi ánh xạ thay đổi, chế độ xem sẽ phản ánh những thay đổi này.
Added in version 3.3.
Thay đổi trong phiên bản 3.9: Đã cập nhật để hỗ trợ toán tử kết hợp mới (
|) từ PEP 584, toán tử này chỉ ủy quyền cho ánh xạ cơ bản.- key in proxy
Trả về
Truenếu ánh xạ cơ bản có khóa key, nếu không thìFalse.
- proxy[key]
Trả về mục của ánh xạ cơ bản bằng khóa key. Tăng
KeyErrornếu key không có trong ánh xạ cơ bản.
- iter(proxy)
Trả về một trình vòng lặp qua các khóa của ánh xạ cơ bản. Đây là lối tắt cho
iter(proxy.keys()).
- len(proxy)
Trả về số lượng mục trong ánh xạ cơ bản.
- copy()¶
Trả về một bản sao nông của ánh xạ cơ bản.
- get(key[, default])¶
Trả về giá trị cho key nếu key nằm trong ánh xạ cơ bản, nếu không thì default. Nếu default không được cung cấp, nó sẽ mặc định là
None, do đó phương pháp này không bao giờ tăngKeyError.
- items()¶
Trả về chế độ xem mới về các mục của ánh xạ cơ bản (cặp
(key, value)).
- keys()¶
Trả về chế độ xem mới về các khóa của ánh xạ cơ bản.
- values()¶
Trả về chế độ xem mới về các giá trị của ánh xạ cơ bản.
- reversed(proxy)
Trả về một trình vòng lặp ngược qua các khóa của ánh xạ cơ bản.
Added in version 3.9.
- hash(proxy)
Trả về hàm băm của ánh xạ cơ bản.
Added in version 3.12.
- class types.CapsuleType¶
Loại capsule objects.
Added in version 3.13.
Các lớp và chức năng tiện ích bổ sung¶
- class types.SimpleNamespace¶
Một lớp con
objectđơn giản cung cấp quyền truy cập thuộc tính vào không gian tên của nó, cũng như một đại diện có ý nghĩa.Không giống như
object, vớiSimpleNamespacebạn có thể thêm và xóa thuộc tính.Các đối tượng
SimpleNamespacecó thể được khởi tạo theo cách tương tự nhưdict: với đối số từ khóa, với một đối số vị trí duy nhất hoặc với cả hai. Khi được khởi tạo với các đối số từ khóa, chúng sẽ được thêm trực tiếp vào không gian tên cơ bản. Ngoài ra, khi được khởi tạo bằng đối số vị trí, không gian tên cơ bản sẽ được cập nhật với các cặp khóa-giá trị từ đối số đó (đối tượng ánh xạ hoặc đối tượng iterable tạo ra cặp khóa-giá trị). Tất cả các khóa như vậy phải là chuỗi.Loại này gần tương đương với đoạn mã sau:
lớp SimpleNamespace: def __init__(self, maps_or_iterable=(), /, **kwargs): self.__dict__.update(mapping_or_iterable) self.__dict__.update(kwargs) chắc chắn __repr__(tự): items = (f"{k}={v!r}" cho k, v trong self.__dict__.items()) return "{}({})".format(type(self).__name__, ", ".join(items)) def __eq__(bản thân, người khác): nếu isinstance(self, SimpleNamespace) và isinstance(other, SimpleNamespace): trả về self.__dict__ == other.__dict__ trả về Chưa thực hiện
SimpleNamespacecó thể hữu ích khi thay thế choclass NS: pass. Tuy nhiên, đối với loại bản ghi có cấu trúc, hãy sử dụngnamedtuple()thay thế.Các đối tượng
SimpleNamespaceđượccopy.replace()hỗ trợ.Added in version 3.3.
Thay đổi trong phiên bản 3.9: Thứ tự thuộc tính trong phần lặp lại đã thay đổi từ bảng chữ cái sang cách chèn (như
dict).Thay đổi trong phiên bản 3.13: Đã thêm hỗ trợ cho một đối số vị trí tùy chọn.
- types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)¶
Định tuyến quyền truy cập thuộc tính trên một lớp tới __getattr__.
Đây là một bộ mô tả, được sử dụng để xác định các thuộc tính hoạt động khác nhau khi được truy cập thông qua một thể hiện và thông qua một lớp. Quyền truy cập phiên bản vẫn bình thường, nhưng quyền truy cập vào một thuộc tính thông qua một lớp sẽ được chuyển đến phương thức __getattr__ của lớp đó; điều này được thực hiện bằng cách tăng AttributionError.
Điều này cho phép một người có các thuộc tính hoạt động trên một phiên bản và có các thuộc tính ảo trên lớp có cùng tên (xem
enum.Enumđể biết ví dụ).Added in version 3.4.
Các hàm tiện ích của Coroutine¶
- types.coroutine(gen_func)¶
Hàm này chuyển đổi hàm generator thành coroutine function và trả về một coroutine dựa trên trình tạo. Coroutine dựa trên trình tạo vẫn là generator iterator, nhưng cũng được coi là một đối tượng coroutine và là awaitable. Tuy nhiên, nó có thể không nhất thiết phải thực hiện phương pháp
__await__().Nếu gen_func là một hàm tạo, nó sẽ được sửa đổi tại chỗ.
Nếu gen_func không phải là chức năng tạo, nó sẽ bị gói. Nếu nó trả về một phiên bản của
collections.abc.Generator, phiên bản đó sẽ được gói trong một đối tượng proxy awaitable. Tất cả các loại đối tượng khác sẽ được trả về nguyên trạng.Added in version 3.5.