类型-动态类型创建和内置类型的名称

源代码: Lib/types.py


该模块定义了 Util Function,以帮助动态创建新类型。

它还定义了标准 Python 解释器使用的某些对象类型的名称,但未像intstr这样的内置函数公开。

最后,它提供了一些其他的与类型相关的 Util 类和函数,这些类和函数的基础性不足以内置。

动态类型创建

前三个参数是构成类定义 Headers 的组件:类名称,Base Class(按 Sequences),关键字参数(例如metaclass)。

版本 3.3 中的新Function。

参数是组成类定义 Headers 的组件:类名称,Base Class(按 Sequences)和关键字参数(例如metaclass)。

返回值是一个三 Tuples:metaclass, namespace, kwds

版本 3.3 中的新Function。

在版本 3.6 中更改:返回的 Tuples 的namespace元素的默认值已更改。现在,当元类没有__prepare__方法时,将使用保留插入 Sequences 的 Map。

See also

  • Metaclasses

  • 这些Function支持的类创建过程的完整详细信息

  • PEP 3115-Python 3000 中的元类

  • 引入了__prepare__名称空间钩子

此函数在* base 中查找不是type实例的项,并返回一个 Tuples,在该 Tuples 中,每个具有__mro_entries__方法的此类对象都将被调用此方法的解压缩结果替换。如果 base *项目是type的实例,或者它没有__mro_entries__方法,则该项目将不变地包含在返回 Tuples 中。

3.7 版中的新Function。

See also

PEP 560-键入模块和通用类型的核心支持

标准 Interpreter 类型

该模块提供了实现 Python 解释器所需的许多类型的名称。故意避免包括一些在处理过程中偶然出现的类型,例如listiterator类型。

这些名称的典型用法是用于isinstance()issubclass()检查。

如果实例化这些类型中的任何一种,请注意,不同的 Python 版本之间的签名可能会有所不同。

为以下类型定义了标准名称:

3.5 版中的新Function。

3.6 版的新Function。

用参数codefilenamenameargcountposonlyargcountkwonlyargcountnlocalsstacksizeflags引发auditing event code.__new__

请注意,审核的参数可能与初始化程序所需的名称或位置不匹配。

3.8 版的新Function。

3.8 版的新Function。

3.7 版中的新Function。

3.7 版中的新Function。

3.7 版中的新Function。

3.7 版中的新Function。

Note

如果要设置各种导入控制的属性,请使用importlib.util.module_from_spec()创建一个新模块。

在版本 3.4 中更改:默认为None。以前,该属性是可选的。

在版本 3.4 中更改:默认为None。以前,该属性是可选的。

有关可用属性和操作的详细信息,以及动态创建回溯的指南,请参见语言参考

有关可用属性和操作的详细信息,请参见语言参考

CPython 实现细节: 在其他 Python 实现中,此类型可能与GetSetDescriptorType相同。

版本 3.3 中的新Function。

其他 Util 类和Function

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。

这是一个 Descriptors,用于定义pass实例和类访问时行为不同的属性。实例访问仍然正常,但是pass类对属性的访问将被路由到该类的__getattr_方法。这是pass引发 AttributeError 来完成的。

这样一来,一个实例就可以具有活动的属性,并且在类上具有相同名称的虚拟属性(有关示例,请参见 Enum)。

3.4 版的新Function。

协程 Util Function

如果* gen_func *是一个生成器函数,它将被就地修改。

如果* gen_func 不是生成器函数,它将被包装。如果它返回collections.abc.Generator的实例,则该实例将被包装在 awaitable *代理对象中。所有其他类型的对象将照原样返回。

3.5 版中的新Function。

首页