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.NoneType
的类型
None
.3.10 新版功能.
- types.FunctionType
- types.LambdaType
用户定义的函数和由创建的函数的类型
lambda
表达。引发一个 auditing event
function.__new__
带着论点code
。审核事件仅在函数对象的直接实例化时发生,不会在正常编译时引发。
- types.GeneratorType
的类型 generator -迭代器对象,由生成器函数创建。
- types.AsyncGeneratorType
的类型 asynchronous generator -由异步生成器函数创建的迭代器对象。
3.6 新版功能.
- class types.CodeType(**kwargs)
代码对象的类型,如返回者
compile()
.提出一个 auditing event
code.__new__
带着论据code
,filename
,name
,argcount
,posonlyargcount
,kwonlyargcount
,nlocals
,stacksize
,flags
.请注意,审计的参数可能与初始值设定项所需的名称或位置不匹配。审核事件仅在代码对象的直接实例化时发生,不会为正常编译引发。
- types.BuiltinFunctionType
- types.BuiltinMethodType
内置函数的类型
len()
或sys.exit()
和内置类的方法。(此处,术语“内置”是指“用C书写”。)
- types.WrapperDescriptorType
一些内置数据类型和基类的方法类型,如
object.__init__()
或object.__lt__()
.3.7 新版功能.
- types.NotImplementedType
的类型
NotImplemented
.3.10 新版功能.
- types.MethodDescriptorType
某些内置数据类型的方法类型,如
str.join()
.3.7 新版功能.
- class types.ModuleType(name, doc=None)
的类型 modules . 构造函数采用要创建的模块的名称,并且可以选择 docstring .
注解
使用
importlib.util.module_from_spec()
若要设置各种导入控制的属性,请创建一个新模块。- __doc__
这个 docstring 模块的。默认为
None
.
- __loader__
这个 loader 加载了模块。默认为
None
.在 3.4 版更改: 默认为
None
. 以前,属性是可选的。
- types.EllipsisType
的类型
Ellipsis
.3.10 新版功能.
- 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)
返回基础映射中的项数。
- get(key[, default])
返回的值 key 如果 key 在基础映射中,否则 default . 如果 default 未给定,默认为
None
,以便此方法不会引发KeyError
.
- 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.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)
将类的属性访问路由到 __getattr__.
这是一个描述符,用于定义通过实例和类访问时的行为不同的属性。实例访问保持正常,但通过类对属性的访问将路由到类的 __getattr__ 方法;这是通过引发attributeError来完成的。
这允许一个实例上的属性处于活动状态,并且类上的虚拟属性具有相同的名称(请参见
enum.Enum
例如)。3.4 新版功能.
协程效用函数
- types.coroutine(gen_func)
此函数转换 generator 函数转换成 coroutine function 它返回基于生成器的协同程序。基于生成器的协程仍然是一个 generator iterator ,但也被认为是 coroutine 对象和IS awaitable . 但是,它可能不一定实现
__await__()
方法。如果 gen_func 是一个生成器函数,它将被就地修改。
如果 gen_func 不是生成器函数,它将被封装。如果它返回
collections.abc.Generator
,实例将封装在 可期待的 代理对象。所有其他类型的对象都将按原样返回。3.5 新版功能.