On this page
类型-动态类型创建和内置类型的名称
源代码: Lib/types.py
该模块定义了 Util Function,以帮助动态创建新类型。
它还定义了标准 Python 解释器使用的某些对象类型的名称,但未像int或str这样的内置函数公开。
最后,它提供了一些其他的与类型相关的 Util 类和函数,这些类和函数的基础性不足以内置。
动态类型创建
types.
new_class
(* name , bases =(), kwds = None , exec_body = None *)- 使用适当的元类动态创建类对象。
前三个参数是构成类定义 Headers 的组件:类名称,Base Class(按 Sequences),关键字参数(例如metaclass
)。
- exec_body *参数是一个回调,用于填充新创建的类名称空间。它应该接受类名称空间作为其唯一参数,并直接使用类内容更新名称空间。如果未提供回调,则其效果与传入
lambda ns: ns
相同。
版本 3.3 中的新Function。
types.
prepare_class
(* name , bases =(), kwds = None *)- 计算适当的元类并创建类名称空间。
参数是组成类定义 Headers 的组件:类名称,Base Class(按 Sequences)和关键字参数(例如metaclass
)。
返回值是一个三 Tuples:metaclass, namespace, kwds
- metaclass 是适当的元类, namespace 是准备好的类名称空间, kwds 是传入的 kwds 参数的更新副本,其中删除了
'metaclass'
条目。如果没有传入任何 kwds *参数,则它将为空。
版本 3.3 中的新Function。
在版本 3.6 中更改:返回的 Tuples 的namespace
元素的默认值已更改。现在,当元类没有__prepare__
方法时,将使用保留插入 Sequences 的 Map。
See also
这些Function支持的类创建过程的完整详细信息
PEP 3115-Python 3000 中的元类
引入了
__prepare__
名称空间钩子
types.
resolve_bases
(* bases *)- 按照 PEP 560的动态解析 MRO 条目。
此函数在* base 中查找不是type实例的项,并返回一个 Tuples,在该 Tuples 中,每个具有__mro_entries__
方法的此类对象都将被调用此方法的解压缩结果替换。如果 base *项目是type的实例,或者它没有__mro_entries__
方法,则该项目将不变地包含在返回 Tuples 中。
3.7 版中的新Function。
See also
PEP 560-键入模块和通用类型的核心支持
标准 Interpreter 类型
该模块提供了实现 Python 解释器所需的许多类型的名称。故意避免包括一些在处理过程中偶然出现的类型,例如listiterator
类型。
这些名称的典型用法是用于isinstance()或issubclass()检查。
如果实例化这些类型中的任何一种,请注意,不同的 Python 版本之间的签名可能会有所不同。
为以下类型定义了标准名称:
types.
FunctionType
types.
LambdaType
- 用户定义的函数的类型以及由lambda表达式创建的函数。
types.
GeneratorType
- 生成器函数创建的generator -iterator 对象的类型。
types.
CoroutineType
3.5 版中的新Function。
types.
AsyncGeneratorType
- asynchronous generator -iterator 对象的类型,由异步生成器函数创建。
3.6 版的新Function。
-
- class *
types.
CodeType
(*** kwargs *)
- 代码对象的类型,例如compile()返回。
- class *
用参数code
,filename
,name
,argcount
,posonlyargcount
,kwonlyargcount
,nlocals
,stacksize
,flags
引发auditing event code.__new__
。
请注意,审核的参数可能与初始化程序所需的名称或位置不匹配。
replace
((*** kwargs *)- 返回代码对象的副本,其中包含指定字段的新值。
3.8 版的新Function。
types.
CellType
- 单元格对象的类型:此类对象用作函数的自由变量的容器。
3.8 版的新Function。
types.
MethodType
- 用户定义的类实例的方法类型。
types.
BuiltinFunctionType
types.
BuiltinMethodType
- 诸如len()或sys.exit()之类的内置函数的类型以及内置类的方法。 (在这里,术语“内置”是指“用 C 编写”.)
types.
WrapperDescriptorType
- 一些内置数据类型和 Base Class(例如object.init()或object.lt())的方法类型。
3.7 版中的新Function。
types.
MethodWrapperType
- 一些内置数据类型和 Base Class 的* bound *方法的类型。例如,它是
object().__str__
的类型。
- 一些内置数据类型和 Base Class 的* bound *方法的类型。例如,它是
3.7 版中的新Function。
types.
MethodDescriptorType
- 一些内置数据类型(例如str.join())的方法类型。
3.7 版中的新Function。
types.
ClassMethodDescriptorType
- 一些内置数据类型(例如
dict.__dict__['fromkeys']
)的* unbound *类方法的类型。
- 一些内置数据类型(例如
3.7 版中的新Function。
Note
如果要设置各种导入控制的属性,请使用importlib.util.module_from_spec()创建一个新模块。
在版本 3.4 中更改:默认为None
。以前,该属性是可选的。
__name__
- 模块的名称。
__package__
在版本 3.4 中更改:默认为None
。以前,该属性是可选的。
-
- class *
types.
TracebackType
(* tb_next , tb_frame , tb_lasti , tb_lineno *)
- traceback 对象的类型,例如
sys.exc_info()[2]
。
- class *
有关可用属性和操作的详细信息,以及动态创建回溯的指南,请参见语言参考。
types.
FrameType
- 帧对象的类型,例如
tb.tb_frame
(如果tb
是回溯对象)。
- 帧对象的类型,例如
有关可用属性和操作的详细信息,请参见语言参考。
types.
GetSetDescriptorType
- 在扩展模块中使用_定义的对象类型,例如
FrameType.f_locals
或array.array.typecode
。此类型用作对象属性的 Descriptors。它具有与property类型相同的目的,但适用于扩展模块中定义的类。
- 在扩展模块中使用_定义的对象类型,例如
types.
MemberDescriptorType
- 在扩展模块中使用_定义的对象类型,例如
datetime.timedelta.days
。此类型用作使用标准转换函数的简单 C 数据成员的 Descriptors;它具有与property类型相同的目的,但适用于扩展模块中定义的类。
- 在扩展模块中使用_定义的对象类型,例如
CPython 实现细节: 在其他 Python 实现中,此类型可能与GetSetDescriptorType
相同。
- 类别
types.
MappingProxyType
(Map)- Map 的只读代理。它提供了 Map 条目的动态视图,这意味着,当 Map 更改时,该视图将反映这些更改。
版本 3.3 中的新Function。
key in proxy
- 如果基础 Map 具有键* key *,则返回
True
,否则返回False
。
- 如果基础 Map 具有键* key *,则返回
proxy[key]
- 使用键* key 返回基础 Map 的项目。如果 key *不在基础 Map 中,则引发KeyError。
iter(proxy)
- 在基础 Map 的键上返回迭代器。这是
iter(proxy.keys())
的快捷方式。
- 在基础 Map 的键上返回迭代器。这是
len(proxy)
- 返回基础 Map 中的项目数。
copy
( )- 返回基础 Map 的浅表副本。
get
(* key * [,* default *])- 如果* key 在基础 Map 中,则返回 key 的值,否则返回 default 。如果未提供 default *,则默认为
None
,因此该方法永远不会引发KeyError。
- 如果* key 在基础 Map 中,则返回 key 的值,否则返回 default 。如果未提供 default *,则默认为
items
( )- 返回基础 Map 项的新视图(
(key, value)
对)。
- 返回基础 Map 项的新视图(
keys
( )- 返回基础 Map 键的新视图。
values
( )- 返回基础 Map 值的新视图。
其他 Util 类和Function
- 类别
types.
SimpleNamespace
- 一个简单的object子类,提供对其名称空间的属性访问,以及有意义的代表。
与object不同,您可以使用SimpleNamespace
添加和删除属性。如果使用关键字参数初始化SimpleNamespace
对象,则将它们直接添加到基础名称空间。
该类型大致等效于以下代码:
class SimpleNamespace:
def __init__(self, /, **kwargs):
self.__dict__.update(kwargs)
def __repr__(self):
keys = sorted(self.__dict__)
items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
return "{}({})".format(type(self).__name__, ", ".join(items))
def __eq__(self, other):
return self.__dict__ == other.__dict__
SimpleNamespace
可能是class NS: pass
的替代品。但是,对于结构化记录类型,请使用namedtuple()。
版本 3.3 中的新Function。
types.
DynamicClassAttribute
(* fget = None , fset = None , fdel = None , doc = None *)- 将类的属性访问路由到__getattr__。
这是一个 Descriptors,用于定义pass实例和类访问时行为不同的属性。实例访问仍然正常,但是pass类对属性的访问将被路由到该类的__getattr_方法。这是pass引发 AttributeError 来完成的。
这样一来,一个实例就可以具有活动的属性,并且在类上具有相同名称的虚拟属性(有关示例,请参见 Enum)。
3.4 版的新Function。
协程 Util Function
types.
coroutine
(* gen_func *)- 此函数将generator函数转换为coroutine function,该函数返回基于生成器的协程。基于生成器的协程仍然是generator iterator,但也被认为是coroutine对象,并且是awaitable。但是,它不一定必须实现await()方法。
如果* gen_func *是一个生成器函数,它将被就地修改。
如果* gen_func 不是生成器函数,它将被包装。如果它返回collections.abc.Generator的实例,则该实例将被包装在 awaitable *代理对象中。所有其他类型的对象将照原样返回。
3.5 版中的新Function。