You are here:  Home » Python » types-动态类型创建和内置类型的名称(38)Python语言(必读进阶学习教程)(参考资料)

该模块定义了实用程序功能,以帮助动态创建新类型。

它还定义了标准Python解释器使用的某些对象类型的名称,但未公开为像int或 类似的内置str类型。

最后,它提供了一些与类型相关的其他实用程序类和函数,这些类和函数不足以构建。

动态类型创建

types.new_classnamebases =()kwds = Noneexec_body = None 
使用适当的元类动态创建类对象。

前三个参数是组成类定义头的组件:类名,基类(按顺序),关键字参数(如metaclass)。

exec_body参数是用来填充新创建的类名称空间的回调。它应该接受类名称空间作为其唯一参数,并直接使用类内容更新名称空间。如果未提供回调,则其效果与传入相同。lambda ns: ns

版本3.3中的新功能。

types.prepare_classnamebases =()kwds = None 
计算适当的元类并创建类命名空间。

参数是组成类定义头的组件:类名,基类(按顺序)和关键字参数(如metaclass)。

返回值是一个3元组: metaclass, namespace, kwds

metaclass是适当的元类,namespace是准备好的类名称空间,kwds是传入的kwds参数的更新副本,'metaclass'删除了任何条目。如果没有传入kwds 参数,这将是一个空的dict。

版本3.3中的新功能。

在版本3.6中更改:namespace返回的元组的元素的默认值已更改。现在,当元类没有__prepare__方法时,使用插入顺序保留映射。

也可以看看

元类
这些函数支持的类创建过程的完整详细信息
PEP 3115 – Python 3000中的元类
引入了__prepare__命名空间钩子
types.resolve_bases基地
按照指定动态解析MRO条目 PEP 560

此函数查找不是实例的基础中的 项type,并返回一个元组,其中每个具有__mro_entries__方法的此类对象都替换为调用此方法的解压缩结果。如果基础项是实例type,或者它没有__mro_entries__方法,那么它将不包含在返回元组中。

版本3.7中的新功能。

也可以看看

PEP 560 – 对键入模块和泛型类型的核心支持

标准解释器类型

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

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

标准名称是针对以下类型定义的:

types.FunctionType
types.LambdaType
lambda 表达式创建的用户定义函数和函数的类型 。
types.GeneratorType
生成器类型 – 由生成器函数创建的实体对象。
types.CoroutineType
由函数创建的协程对象 的类型。async def

版本3.5中的新功能。

types.AsyncGeneratorType
由异步生成器函数创建的异步生成 –iterator对象的类型。

版本3.6中的新功能。

types.CodeType

代码对象的类型,如返回的compile()

types.MethodType
用户定义的类实例的方法类型。
types.BuiltinFunctionType
types.BuiltinMethodType
内置函数的类型,如len()or sys.exit(),以及内置类的方法。(这里,“内置”一词的意思是“用C语言写的”。)
types.WrapperDescriptorType
一些内置数据类型和基类的方法类型,如 object.__init__()object.__lt__()

版本3.7中的新功能。

types.MethodWrapperType
一些内置数据类型和基类的绑定方法的类型。例如,它的类型object().__str__

版本3.7中的新功能。

types.MethodDescriptorType
一些内置数据类型的方法类型,如str.join()

版本3.7中的新功能。

types.ClassMethodDescriptorType
某些内置数据类型的未绑定类方法的类型,如 dict.__dict__['fromkeys']

版本3.7中的新功能。

class types.ModuleTypenamedoc = None 
模块的类型。构造函数采用要创建的模块的名称以及可选的文档字符串

注意

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

__doc__
模块的docstring。默认为None
__loader__
所述装载器,其装载的模块。默认为None

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

__name__
模块的名称。
__package__
模块属于哪个。如果模块是顶级的(即不是任何特定包的一部分),则应将该属性设置为'',否则应将其设置为包的名称( __name__如果模块是包本身,则可以)。默认为None

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

class types.TracebackTypetb_nexttb_frametb_lastitb_lineno 
回溯对象的类型,例如在sys.exc_info()[2]

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

types.FrameType
tb.tb_frameif中找到的帧对象的类型tb是traceback对象。

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

types.GetSetDescriptorType
扩展模块中定义的对象类型PyGetSetDef,例如FrameType.f_localsarray.array.typecode。此类型用作对象属性的描述符; 它与property类型具有相同的目的 ,但对于扩展模块中定义的类。
types.MemberDescriptorType
扩展模块中定义的对象类型PyMemberDef,例如datetime.timedelta.days。此类型用作使用标准转换函数的简单C数据成员的描述符; 它与property类型具有相同的目的,但对于扩展模块中定义的类。

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

class types.MappingProxyType映射
映射的只读代理。它提供了映射条目的动态视图,这意味着当映射发生更改时,视图会反映这些更改。

版本3.3中的新功能。

key in proxy
True如果底层映射具有密钥, 则返回False
proxy[key]
使用键返回基础映射的项目。引发 KeyErrorif 不在底层映射中。
iter(proxy)
将迭代器返回到底层映射的键上。这是一个捷径iter(proxy.keys())
len(proxy)
返回基础映射中的项目数。
copy
返回底层映射的浅表副本。
get[默认
如果key在底层映射中,则返回key的值,否则返回 default。如果未给出default,则默认为,因此此方法永远不会引发a 。NoneKeyError
items
返回底层映射项( 对)的新视图。(key, value)
keys
返回底层映射键的新视图。
values
返回底层映射值的新视图。

其他实用程序类和函数

types.SimpleNamespace
一个简单的object子类,提供对其命名空间的属性访问,以及有意义的repr。

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: passnamedtuple()

版本3.3中的新功能。

types.DynamicClassAttributefget = Nonefset = Nonefdel = Nonedoc = None 
将类的属性访问路由到__getattr__。

这是一个描述符,用于定义在通过实例和类访问时行为不同的属性。实例访问仍​​然正常,但通过类访问属性将被路由到类的__getattr__方法; 这是通过引发AttributeError来完成的。

这允许在实例上具有活动属性,并且在类上具有相同名称的虚拟属性(有关示例,请参阅枚举)。

版本3.4中的新功能。

协程实用功能

types.coroutinegen_func 
此函数将生成器函数转换为 协程函数,该函数返回基于生成器的协同程序。基于生成器的协程仍然是生成器迭代器,但也被认为是协程对象并且是 等待的。但是,它可能不一定实现该__await__()方法。

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

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

版本3.5中的新功能。