types-动态类型创建和内置类型的名称(38)Python语言(必读进阶学习教程)(参考资料)
该模块定义了实用程序功能,以帮助动态创建新类型。
它还定义了标准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
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()
orsys.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.
ModuleType
(name,doc = None ) - 模块的类型。构造函数采用要创建的模块的名称以及可选的文档字符串。
注意
importlib.util.module_from_spec()
如果要设置各种导入控制属性,请使用创建新模块。__doc__
- 模块的docstring。默认为
None
。
__loader__
- 所述装载器,其装载的模块。默认为
None
。在版本3.4中更改:默认为
None
。以前该属性是可选的。
__name__
- 模块的名称。
__package__
- 模块属于哪个包。如果模块是顶级的(即不是任何特定包的一部分),则应将该属性设置为
''
,否则应将其设置为包的名称(__name__
如果模块是包本身,则可以)。默认为None
。在版本3.4中更改:默认为
None
。以前该属性是可选的。
- class
types.
TracebackType
(tb_next,tb_frame,tb_lasti,tb_lineno ) - 回溯对象的类型,例如在
sys.exc_info()[2]
。有关可用属性和操作的详细信息,请参阅语言参考,以及有关动态创建回溯的指导。
types.
FrameType
- 在
tb.tb_frame
if中找到的帧对象的类型tb
是traceback对象。有关可用属性和操作的详细信息,请参阅语言参考。
types.
GetSetDescriptorType
- 扩展模块中定义的对象类型
PyGetSetDef
,例如FrameType.f_locals
或array.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]
- 使用键键返回基础映射的项目。引发
KeyError
if 键不在底层映射中。
iter(proxy)
- 将迭代器返回到底层映射的键上。这是一个捷径
iter(proxy.keys())
。
len(proxy)
- 返回基础映射中的项目数。
copy
()- 返回底层映射的浅表副本。
get
(键[,默认] )- 如果key在底层映射中,则返回key的值,否则返回 default。如果未给出default,则默认为,因此此方法永远不会引发a 。
None
KeyError
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: pass
namedtuple()
版本3.3中的新功能。
types.
DynamicClassAttribute
(fget = None,fset = None,fdel = None,doc = None )- 将类的属性访问路由到__getattr__。
这是一个描述符,用于定义在通过实例和类访问时行为不同的属性。实例访问仍然正常,但通过类访问属性将被路由到类的__getattr__方法; 这是通过引发AttributeError来完成的。
这允许在实例上具有活动属性,并且在类上具有相同名称的虚拟属性(有关示例,请参阅枚举)。
版本3.4中的新功能。
协程实用功能
types.
coroutine
(gen_func )- 此函数将生成器函数转换为 协程函数,该函数返回基于生成器的协同程序。基于生成器的协程仍然是生成器迭代器,但也被认为是协程对象并且是 等待的。但是,它可能不一定实现该
__await__()
方法。如果gen_func是生成器函数,它将被就地修改。
如果gen_func不是生成器函数,它将被包装。如果它返回一个实例
collections.abc.Generator
,则实例将被包装在一个等待的代理对象中。所有其他类型的对象将按原样返回。版本3.5中的新功能。
超哥软件库 » types-动态类型创建和内置类型的名称(38)Python语言(必读进阶学习教程)(参考资料)