types
---动态类型创建和内置类型的名称¶
源代码: Lib/types.py
此模块定义实用程序函数以帮助动态创建新类型。
它还为标准的python解释器使用的一些对象类型定义名称,但不作为内置的 int
或 str
是。
最后,它提供了一些额外的与类型相关的实用程序类和函数,这些类和函数不够基本,不能内置。
动态类型创建¶
- types.new_class(name, bases=(), kwds=None, exec_body=None)¶
使用适当的元类动态创建类对象。
前三个参数是组成类定义头的组件:类名、基类(按顺序)、关键字参数(如
metaclass
)这个 exec_body 参数是用于填充新创建的类命名空间的回调。它应该接受类名称空间作为它的唯一参数,并直接用类内容更新名称空间。如果没有提供回调,则其效果与传入相同
lambda ns: ns
.3.3 新版功能.
- types.prepare_class(name, bases=(), kwds=None)¶
计算适当的元类并创建类命名空间。
参数是构成类定义头的组件:类名、基类(按顺序)和关键字参数(如
metaclass
)返回值是3元组:
metaclass, namespace, kwds
元类 是适当的元类, 命名空间 是准备好的类命名空间和 kwds 是传入的更新副本 kwds 与任何
'metaclass'
删除条目。如果没有 kwds 参数已传入,这将是一个空的dict。3.3 新版功能.
在 3.6 版更改: 的默认值
namespace
返回的元组的元素已更改。现在,当元类没有__prepare__
方法。
- types.resolve_bases(bases)¶
根据指定动态解析MRO条目 PEP 560 .
此函数查找 碱 这不是
type
,并返回一个元组,其中每个这样的对象__mro_entries__
方法替换为调用此方法的解包结果。如果A 碱 项是的实例type
或者它没有__mro_entries__
方法,然后将其包含在未更改的返回元组中。3.7 新版功能.
参见
PEP 560 -对类型模块和泛型类型的核心支持
标准解释程序类型¶
此模块为实现Python解释器所需的许多类型提供名称。它故意避免包括一些在处理过程中偶然出现的类型,例如 listiterator
类型。
这些名称的典型用法是 isinstance()
或 issubclass()
检查。
如果您实例化这些类型中的任何一个,请注意,签名可能在不同的Python版本之间有所不同。
标准名称是为以下类型定义的:
- types.FunctionType¶
- types.LambdaType¶
用户定义的函数和由创建的函数的类型
lambda
表达。引发一个 auditing event
function.__new__
带着论点code
。审核事件仅在函数对象的直接实例化时发生,不会在正常编译时引发。
- types.AsyncGeneratorType¶
的类型 asynchronous generator -由异步生成器函数创建的迭代器对象。
3.6 新版功能.
- class types.CodeType(**kwargs)¶
代码对象的类型,如返回者
compile()
.提出一个 auditing event
code.__new__
带着论据code
,filename
,name
,argcount
,posonlyargcount
,kwonlyargcount
,nlocals
,stacksize
,flags
.请注意,审计的参数可能与初始值设定项所需的名称或位置不匹配。审核事件仅在代码对象的直接实例化时发生,不会为正常编译引发。
- replace(**kwargs)¶
用指定字段的新值返回代码对象的副本。
3.8 新版功能.
- types.CellType¶
单元格对象的类型:此类对象用作函数自由变量的容器。
3.8 新版功能.
- types.MethodType¶
用户定义类实例的方法类型。
- types.BuiltinFunctionType¶
- types.BuiltinMethodType¶
内置函数的类型
len()
或sys.exit()
和内置类的方法。(此处,术语“内置”是指“用C书写”。)
- types.WrapperDescriptorType¶
一些内置数据类型和基类的方法类型,如
object.__init__()
或object.__lt__()
.3.7 新版功能.
- types.MethodWrapperType¶
的类型 跳跃 一些内置数据类型和基类的方法。例如,它是
object().__str__
.3.7 新版功能.
- types.NotImplementedType¶
的类型
NotImplemented
.3.10 新版功能.
- types.MethodDescriptorType¶
某些内置数据类型的方法类型,如
str.join()
.3.7 新版功能.
- types.ClassMethodDescriptorType¶
的类型 未绑定的 一些内置数据类型的类方法,例如
dict.__dict__['fromkeys']
.3.7 新版功能.
- class types.ModuleType(name, doc=None)¶
的类型 modules . 构造函数采用要创建的模块的名称,并且可以选择 docstring .
注解
使用
importlib.util.module_from_spec()
若要设置各种导入控制的属性,请创建一个新模块。- __name__¶
模块的名称。
- class types.GenericAlias(t_origin, t_args)¶
的类型 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
3.9 新版功能.
在 3.9.2 版更改: 现在可以将此类型划分为子类。
- types.Union¶
的类型 union type expressions 。
3.10 新版功能.
- class types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)¶
回溯对象的类型,如
sys.exc_info()[2]
.见 the language reference 有关可用属性和操作的详细信息,以及有关动态创建回溯的指导。
- types.FrameType¶
框架对象的类型,如
tb.tb_frame
如果tb
是一个回溯对象。见 the language reference 有关可用属性和操作的详细信息。
- types.GetSetDescriptorType¶
在扩展模块中定义的对象类型
PyGetSetDef
,如FrameType.f_locals
或array.array.typecode
.此类型用作对象属性的描述符;其用途与property
类型,但用于扩展模块中定义的类。
- types.MemberDescriptorType¶
在扩展模块中定义的对象类型
PyMemberDef
,如datetime.timedelta.days
.此类型用作使用标准转换函数的简单C数据成员的描述符;它与property
类型,但用于扩展模块中定义的类。CPython implementation detail: 在Python的其他实现中,此类型可能与
GetSetDescriptorType
.
- class types.MappingProxyType(mapping)¶
映射的只读代理。它提供了映射项的动态视图,这意味着当映射更改时,视图会反映这些更改。
3.3 新版功能.
在 3.9 版更改: 更新以支持新联盟 (
|
)接线员来自 PEP 584 ,它只委托给底层映射。- key in proxy
返回
True
如果基础映射具有键 key ,否则False
.
- proxy[key]
用键返回基础映射的项 key .提高
KeyError
如果 key 不在基础映射中。
- iter(proxy)
通过基础映射的键返回迭代器。这是一个快捷方式
iter(proxy.keys())
.
- len(proxy)
返回基础映射中的项数。
- copy()¶
返回基础映射的浅副本。
- get(key[, default])¶
返回的值 key 如果 key 在基础映射中,否则 default . 如果 default 未给定,默认为
None
,以便此方法不会引发KeyError
.
- items()¶
返回基础映射项的新视图 (
(key, value)
对)。
- keys()¶
返回基础映射键的新视图。
- values()¶
返回基础映射值的新视图。
- reversed(proxy)
在基础映射的键上返回一个反向迭代器。
3.9 新版功能.
附加实用程序类和函数¶
- class types.SimpleNamespace¶
简单的
object
提供对其命名空间的属性访问的子类,以及有意义的repr。不像
object
用SimpleNamespace
您可以添加和删除属性。如果ASimpleNamespace
对象是用关键字参数初始化的,这些参数直接添加到基础命名空间中。类型大致相当于以下代码:
class SimpleNamespace: def __init__(self, /, **kwargs): 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()
相反。3.3 新版功能.
在 3.9 版更改: repr中的属性顺序从字母顺序更改为插入(如
dict
)
协程效用函数¶
- types.coroutine(gen_func)¶
此函数转换 generator 函数转换成 coroutine function 它返回基于生成器的协同程序。基于生成器的协程仍然是一个 generator iterator ,但也被认为是 coroutine 对象和IS awaitable . 但是,它可能不一定实现
__await__()
方法。如果 gen_func 是一个生成器函数,它将被就地修改。
如果 gen_func 不是生成器函数,它将被封装。如果它返回
collections.abc.Generator
,实例将封装在 可期待的 代理对象。所有其他类型的对象都将按原样返回。3.5 新版功能.