新聞中心
types —- 動態(tài)類型創(chuàng)建和內(nèi)置類型名稱
源代碼: Lib/types.py

專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計、成都網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)涿鹿免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了上千企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
此模塊定義了一些工具函數(shù),用于協(xié)助動態(tài)創(chuàng)建新的類型。
它還為某些對象類型定義了名稱,這些名稱由標(biāo)準(zhǔn) python 解釋器所使用,但并不像內(nèi)置的 int 或 str 那樣對外公開。
最后,它還額外提供了一些類型相關(guān)但重要程度不足以作為內(nèi)置對象的工具類和函數(shù)。
動態(tài)類型創(chuàng)建
types.new_class(name, bases=(), kwds=None, exec_body=None)
使用適當(dāng)?shù)脑悇討B(tài)地創(chuàng)建一個類對象。
前三個參數(shù)是組成類定義頭的部件:類名稱,基類 (有序排列),關(guān)鍵字參數(shù) (例如 metaclass)。
exec_body 參數(shù)是一個回調(diào)函數(shù),用于填充新創(chuàng)建類的命名空間。 它應(yīng)當(dāng)接受類命名空間作為其唯一的參數(shù)并使用類內(nèi)容直接更新命名空間。 如果未提供回調(diào)函數(shù),則它就等效于傳入 lambda ns: None。
3.3 新版功能.
types.prepare_class(name, bases=(), kwds=None)
計算適當(dāng)?shù)脑惒?chuàng)建類命名空間。
參數(shù)是組成類定義頭的部件:類名稱,基類 (有序排列) 以及關(guān)鍵字參數(shù) (例如 metaclass)。
返回值是一個 3 元組: metaclass, namespace, kwds
metaclass 是適當(dāng)?shù)脑悾?em>namespace 是預(yù)備好的類命名空間而 kwds 是所傳入 kwds 參數(shù)移除每個 'metaclass' 條目后的已更新副本。 如果未傳入 kwds 參數(shù),這將為一個空字典。
3.3 新版功能.
在 3.6 版更改: 所返回元組中 namespace 元素的默認(rèn)值已被改變。 現(xiàn)在當(dāng)元類沒有 __prepare__ 方法時將會使用一個保留插入順序的映射。
參見
元類
這些函數(shù)所支持的類創(chuàng)建過程的完整細(xì)節(jié)
PEP 3115 - Python 3000 中的元類
引入 __prepare__ 命名空間鉤子
types.resolve_bases(bases)
動態(tài)地解析 MRO 條目,具體描述見 PEP 560。
此函數(shù)會在 bases 中查找不是 type 的實例的項,并返回一個元組,其中每個具有 __mro_entries__ 方法的此種對象對象將被替換為調(diào)用該方法解包后的結(jié)果。 如果一個 bases 項是 type 的實例,或它不具有 __mro_entries__ 方法,則它將不加改變地被包含在返回的元組中。
3.7 新版功能.
參見
PEP 560 - 對 typing 模塊和泛型類型的核心支持
標(biāo)準(zhǔn)解釋器類型
此模塊為許多類型提供了實現(xiàn) Python 解釋器所要求的名稱。 它刻意地避免了包含某些僅在處理過程中偶然出現(xiàn)的類型,例如 listiterator 類型。
此種名稱的典型應(yīng)用如 isinstance() 或 issubclass() 檢測。
如果你要實例化這些類型中的任何一種,請注意其簽名在不同 Python 版本之間可能出現(xiàn)變化。
以下類型有相應(yīng)的標(biāo)準(zhǔn)名稱定義:
types.NoneType
None 的類型。
3.10 新版功能.
types.FunctionType
types.LambdaType
用戶自定義函數(shù)以及由 lambda 表達(dá)式所創(chuàng)建函數(shù)的類型。
引發(fā)一個 審計事件 function.__new__,附帶參數(shù) code。
此審計事件只會被函數(shù)對象的直接實例化引發(fā),而不會被普通編譯所引發(fā)。
types.GeneratorType
generator 迭代器對象的類型,由生成器函數(shù)創(chuàng)建。
types.CoroutineType
coroutine 對象的類型,由 async def 函數(shù)創(chuàng)建。
3.5 新版功能.
types.AsyncGeneratorType
asynchronous generator 迭代器對象的類型,由異步生成器函數(shù)創(chuàng)建。
3.6 新版功能.
class types.CodeType(\*kwargs*)
代碼對象的類型,例如 compile() 的返回值。
引發(fā) 審計事件 code.__new__ 附帶參數(shù) code, filename, name, argcount, posonlyargcount, kwonlyargcount, nlocals, stacksize, flags。
請注意被審計的參數(shù)可能與初始化代碼所要求的名稱或位置不相匹配。 審計事件只會被代碼對象的直接實例化引發(fā),而不會被普通編譯所引發(fā)。
-
replace(\*kwargs*)
返回代碼對象的一個副本,使用指定的新字段值。
3.8 新版功能.
types.CellType
單元對象的類型:這種對象被用作函數(shù)中自由變量的容器。
3.8 新版功能.
types.MethodType
用戶自定義類實例方法的類型。
types.BuiltinFunctionType
types.BuiltinMethodType
內(nèi)置函數(shù)例如 len() 或 sys.exit() 以及內(nèi)置類方法的類型。 (這里所說的“內(nèi)置”是指“以 C 語言編寫”。)
types.WrapperDescriptorType
某些內(nèi)置數(shù)據(jù)類型和基類的方法的類型,例如 object.__init__() 或 object.__lt__()。
3.7 新版功能.
types.MethodWrapperType
某些內(nèi)置數(shù)據(jù)類型和基類的 綁定 方法的類型。 例如 object().__str__ 所屬的類型。
3.7 新版功能.
types.NotImplementedType
NotImplemented 的類型。
3.10 新版功能.
types.MethodDescriptorType
某些內(nèi)置數(shù)據(jù)類型方法例如 str.join() 的類型。
3.7 新版功能.
types.ClassMethodDescriptorType
某些內(nèi)置數(shù)據(jù)類型 非綁定 類方法例如 dict.__dict__['fromkeys'] 的類型。
3.7 新版功能.
class types.ModuleType(name, doc=None)
模塊 的類型。 構(gòu)造器接受待創(chuàng)建模塊的名稱并以其 docstring 作為可選參數(shù)。
備注
如果你希望設(shè)置各種由導(dǎo)入控制的屬性,請使用 importlib.util.module_from_spec() 來創(chuàng)建一個新模塊。
-
__doc__
模塊的 docstring。 默認(rèn)為
None。 -
__loader__
用于加載模塊的 loader。 默認(rèn)為
None。This attribute is to match importlib.machinery.ModuleSpec.loader as stored in the __spec__ object.
備注
未來的 Python 版本可能會停止默認(rèn)設(shè)置此屬性。 為了避免這個潛在變化的影響,如果你明確地需要使用此屬性則推薦改從 __spec__ 屬性讀取或是使用
getattr(module, "__loader__", None)。在 3.4 版更改: 默認(rèn)為
None。 之前該屬性為可選項。 -
__name__
模塊的名稱。 應(yīng)當(dāng)能匹配 importlib.machinery.ModuleSpec.name。
-
__package__
一個模塊所屬的 package。 如果模塊為最高層級的(即不是任何特定包的組成部分)則該屬性應(yīng)設(shè)為
'',否則它應(yīng)設(shè)為特定包的名稱 (如果模塊本身也是一個包則名稱可以為 __name__)。 默認(rèn)為None。This attribute is to match importlib.machinery.ModuleSpec.parent as stored in the __spec__ object.
備注
未來的 Python 版本可能停止默認(rèn)設(shè)置此屬性。 為了避免這個潛在變化的影響,如果你明確地需要使用此屬性則推薦改從 __spec__ 屬性讀取或是使用
getattr(module, "__package__", None)。在 3.4 版更改: 默認(rèn)為
None。 之前該屬性為可選項。 -
__spec__
模塊的導(dǎo)入系統(tǒng)相關(guān)狀態(tài)的記錄。 應(yīng)當(dāng)是一個 importlib.machinery.ModuleSpec 的實例。
3.4 新版功能.
types.EllipsisType
Ellipsis 的類型。
3.10 新版功能.
class types.GenericAlias(t_origin, t_args)
形參化泛型 的類型,例如 list[int]。
t_origin 應(yīng)當(dāng)是一個非形參化的泛型類,例如 list, tuple 或 dict。 t_args 應(yīng)當(dāng)是一個形參化 t_origin 的 tuple (長度可以為 1):
>>> from types import GenericAlias>>> list[int] == GenericAlias(list, (int,))True>>> dict[str, int] == GenericAlias(dict, (str, int))True
3.9 新版功能.
在 3.9.2 版更改: 此類型現(xiàn)在可以被子類化。
class types.UnionType
合并類型表達(dá)式 的類型。
3.10 新版功能.
class types.TracebackType(tb_next, tb_frame, tb_lasti, tb_lineno)
回溯對象的類型,例如 sys.exc_info()[2] 中的對象。
請查看 語言參考 了解可用屬性和操作的細(xì)節(jié),以及動態(tài)地創(chuàng)建回溯對象的指南。
types.FrameType
幀對象的類型,例如 tb.tb_frame 中的對象,其中 tb 是一個回溯對象。
請查看 語言參考 了解可用屬性和操作的細(xì)節(jié)。
types.GetSetDescriptorType
使用 PyGetSetDef 在擴(kuò)展模塊中定義的對象的類型,例如 FrameType.f_locals 或 array.array.typecode。 此類型被用作對象屬性的描述器;它的目的與 property 類型相同,但專門針對在擴(kuò)展模塊中定義的類。
types.MemberDescriptorType
使用 PyMemberDef 在擴(kuò)展模塊中定義的對象的類型,例如 datetime.timedelta.days。 此類型被用作使用標(biāo)準(zhǔn)轉(zhuǎn)換函數(shù)的簡單 C 數(shù)據(jù)成員的描述器;它的目的與 property 類型相同,但專門針對在擴(kuò)展模塊中定義的類。
CPython 實現(xiàn)細(xì)節(jié): 在 Python 的其它實現(xiàn)中,此類型可能與 GetSetDescriptorType 完全相同。
class types.MappingProxyType(mapping)
一個映射的只讀代理。 它提供了對映射條目的動態(tài)視圖,這意味著當(dāng)映射發(fā)生改變時,視圖會反映這些改變。
3.3 新版功能.
在 3.9 版更改: 更新為支持 PEP 584 所新增的合并 (|) 運(yùn)算符,它會簡單地委托給下層的映射。
-
key in proxy
如果下層的映射中存在鍵 key 則返回
True,否則返回False。 -
proxy[key]
返回下層的映射中以 key 為鍵的項。 如果下層的映射中不存在鍵 key 則引發(fā) KeyError。
-
iter(proxy)
返回由下層映射的鍵為元素的迭代器。 這是
iter(proxy.keys())的快捷方式。 -
len(proxy)
返回下層映射中的項數(shù)。
-
copy()
返回下層映射的淺拷貝。
-
get(key[, default])
如果 key 存在于下層映射中則返回 key 的值,否則返回 default。 如果 default 未給出則默認(rèn)為
None,因而此方法絕不會引發(fā) KeyError。 -
items()
返回由下層映射的項 (
(鍵, 值)對) 組成的一個新視圖。 -
keys()
返回由下層映射的鍵組成的一個新視圖。
-
values()
返回由下層映射的值組成的一個新視圖。
-
reversed(proxy)
返回一個包含下層映射的鍵的反向迭代器。
3.9 新版功能.
附加工具類和函數(shù)
class types.SimpleNamespace
一個簡單的 object 子類,提供了訪問其命名空間的屬性,以及一個有意義的 repr。
不同于 object,對于 SimpleNamespace 你可以添加和移除屬性。 如果一個 SimpleNamespace 對象使用關(guān)鍵字參數(shù)進(jìn)行初始化,這些參數(shù)會被直接加入下層命名空間。
此類型大致等價于以下代碼:
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。 但是,對于結(jié)構(gòu)化記錄類型則應(yīng)改用 namedtuple()。
3.3 新版功能.
在 3.9 版更改: repr 中的屬性順序由字母順序改為插入順序 (類似 dict)。
types.DynamicClassAttribute(fget=None, fset=None, fdel=None, doc=None)
在類上訪問 __getattr__ 的路由屬性。
這是一個描述器,用于定義通過實例與通過類訪問時具有不同行為的屬性。 當(dāng)實例訪問時保持正常行為,但當(dāng)類訪問屬性時將被路由至類的 __getattr__ 方法;這是通過引發(fā) AttributeError 來完成的。
這允許有在實例上激活的特性屬性,同時又有在類上的同名虛擬屬性 (一個例子請參見 enum.Enum)。
3.4 新版功能.
協(xié)程工具函數(shù)
types.coroutine(gen_func)
此函數(shù)可將 generator 函數(shù)轉(zhuǎn)換為返回基于生成器的協(xié)程的 coroutine function。 基于生成器的協(xié)程仍然屬于 generator iterator,但同時又可被視為 coroutine 對象兼 awaitable。 不過,它沒有必要實現(xiàn) __await__() 方法。
如果 gen_func 是一個生成器函數(shù),它將被原地修改。
如果 gen_func 不是一個生成器函數(shù),則它會被包裝。 如果它返回一個 collections.abc.Generator 的實例,該實例將被包裝在一個 awaitable 代理對象中。 所有其他對象類型將被原樣返回。
3.5 新版功能.
分享題目:創(chuàng)新互聯(lián)Python教程:types—-動態(tài)類型創(chuàng)建和內(nèi)置類型名稱
分享URL:http://www.dlmjj.cn/article/coojcsi.html


咨詢
建站咨詢
