?types --- 動態類型創建和內置類型名稱?

目錄

動態類型創建

標準解釋器類型

附加工具類和函數

協程工具函數


源代碼:?Lib/types.py


此模塊定義了一些工具函數,用于協助動態創建新的類型。

它還為某些對象類型定義了名稱,這些名稱由標準 Python 解釋器所使用,但并不像內置的?int?或?str?那樣對外公開。

最后,它還額外提供了一些類型相關但重要程度不足以作為內置對象的工具類和函數。

動態類型創建

types.new_class(name,?bases=(),?kwds=None,?exec_body=None)

使用適當的元類動態地創建一個類對象。

前三個參數是組成類定義頭的部件:類名稱,基類 (有序排列),關鍵字參數 (例如?metaclass)。

exec_body?參數是一個回調函數,用于填充新創建類的命名空間。 它應當接受類命名空間作為其唯一的參數并使用類內容直接更新命名空間。 如果未提供回調函數,則它就等效于傳入?lambda?ns:?None

3.3 新版功能.

types.prepare_class(name,?bases=(),?kwds=None)

計算適當的元類并創建類命名空間。

參數是組成類定義頭的部件:類名稱,基類 (有序排列) 以及關鍵字參數 (例如?metaclass)。

返回值是一個 3 元組:?metaclass,?namespace,?kwds

metaclass?是適當的元類,namespace?是預備好的類命名空間而?kwds?是所傳入?kwds?參數移除每個?'metaclass'?條目后的已更新副本。 如果未傳入?kwds?參數,這將為一個空字典。

3.3 新版功能.

在 3.6 版更改:?所返回元組中?namespace?元素的默認值已被改變。 現在當元類沒有?__prepare__?方法時將會使用一個保留插入順序的映射。

參見

元類

這些函數所支持的類創建過程的完整細節

PEP 3115?- Python 3000 中的元類

引入?__prepare__?命名空間鉤子

types.resolve_bases(bases)

動態地解析 MRO 條目,具體描述見?PEP 560。

此函數會在?bases?中查找不是?type?的實例的項,并返回一個元組,其中每個具有?__mro_entries__()?方法的此種對象將被替換為調用該方法解包后的結果。 如果一個?bases?項是?type?的實例,或它不具有?__mro_entries__()?方法 ,則它將不加改變地被包括在返回的元組中。

3.7 新版功能.

types.get_original_bases(cls,?/)

在?__mro_entries__()?方法在任何基類上被調用之前返回最初是作為?cls?的基類給出的對象元組(根據?PEP 560?所描述的機制)。 這在對?泛型?進行內省時很有用處。

對于具有?__orig_bases__?屬性的類,此函數將返回?cls.__orig_bases__?的值。 對于沒有?__orig_bases__?屬性的類,則將返回?cls.__bases__

示例:

from typing import TypeVar, Generic, NamedTuple, TypedDictT = TypeVar("T")
class Foo(Generic[T]): ...
class Bar(Foo[int], float): ...
class Baz(list[str]): ...
Eggs = NamedTuple("Eggs", [("a", int), ("b", str)])
Spam = TypedDict("Spam", {"a": int, "b": str})assert Bar.__bases__ == (Foo, float)
assert get_original_bases(Bar) == (Foo[int], float)assert Baz.__bases__ == (list,)
assert get_original_bases(Baz) == (list[str],)assert Eggs.__bases__ == (tuple,)
assert get_original_bases(Eggs) == (NamedTuple,)assert Spam.__bases__ == (dict,)
assert get_original_bases(Spam) == (TypedDict,)assert int.__bases__ == (object,)
assert get_original_bases(int) == (object,)

3.12 新版功能.

參見

PEP 560?- 對 typing 模塊和泛型類型的核心支持

標準解釋器類型

此模塊為許多類型提供了實現 Python 解釋器所要求的名稱。 它刻意地避免了包含某些僅在處理過程中偶然出現的類型,例如?listiterator?類型。

此種名稱的典型應用如?isinstance()?或?issubclass()?檢測。

如果你要實例化這些類型中的任何一種,請注意其簽名在不同 Python 版本之間可能出現變化。

以下類型有相應的標準名稱定義:

types.NoneType

None?的類型。

3.10 新版功能.

types.FunctionType

types.LambdaType

用戶自定義函數以及由?lambda?表達式所創建函數的類型。

引發一個?審計事件?function.__new__,附帶參數?code

此審計事件只會被函數對象的直接實例化引發,而不會被普通編譯所引發。

types.GeneratorType

generator?迭代器對象的類型,由生成器函數創建。

types.CoroutineType

coroutine?對象的類型,由?async?def?函數創建。

3.5 新版功能.

types.AsyncGeneratorType

asynchronous generator?迭代器對象的類型,由異步生成器函數創建。

3.6 新版功能.

class?types.CodeType(**kwargs)

代碼對象的類型,例如?compile()?的返回值。

引發?審計事件?code.__new__?附帶參數?code,?filename,?name,?argcount,?posonlyargcount,?kwonlyargcount,?nlocals,?stacksize,?flags

請注意被審計的參數可能與初始化代碼所要求的名稱或位置不相匹配。 審計事件只會被代碼對象的直接實例化引發,而不會被普通編譯所引發。

replace(**kwargs)

返回代碼對象的一個副本,使用指定的新字段值。

3.8 新版功能.

types.CellType

單元對象的類型:這種對象被用作函數中自由變量的容器。

3.8 新版功能.

types.MethodType

用戶自定義類實例方法的類型。

types.BuiltinFunctionType

types.BuiltinMethodType

內置函數例如?len()?或?sys.exit()?以及內置類方法的類型。 (這里所說的“內置”是指“以 C 語言編寫”。)

types.WrapperDescriptorType

某些內置數據類型和基類的方法的類型,例如?object.__init__()?或?object.__lt__()。

3.7 新版功能.

types.MethodWrapperType

某些內置數據類型和基類的?綁定?方法的類型。 例如?object().__str__?所屬的類型。

3.7 新版功能.

types.NotImplementedType

NotImplemented?的類型。

3.10 新版功能.

types.MethodDescriptorType

某些內置數據類型方法例如?str.join()?的類型。

3.7 新版功能.

types.ClassMethodDescriptorType

某些內置數據類型?非綁定?類方法例如?dict.__dict__['fromkeys']?的類型。

3.7 新版功能.

class?types.ModuleType(name,?doc=None)

模塊?的類型。 構造器接受待創建模塊的名稱并以其?docstring?作為可選參數。

備注

如果你希望設置各種由導入控制的屬性,請使用?importlib.util.module_from_spec()?來創建一個新模塊。

__doc__

模塊的?docstring。 默認為?None

__loader__

用于加載模塊的?loader。 默認為?None

此屬性會匹配保存在?__spec__?object 對象中的?importlib.machinery.ModuleSpec.loader。

備注

未來的 Python 版本可能會停止默認設置此屬性。 為了避免這個潛在變化的影響,如果你明確地需要使用此屬性則推薦改從?__spec__?屬性讀取或是使用?getattr(module,?"__loader__",?None)

在 3.4 版更改:?默認為?None。 之前該屬性為可選項。

__name__

模塊的名稱。 應當能匹配?importlib.machinery.ModuleSpec.name。

__package__

一個模塊所屬的?package。 如果模塊為最高層級的(即不是任何特定包的組成部分)則該屬性應設為?'',否則它應設為特定包的名稱 (如果模塊本身也是一個包則名稱可以為?__name__)。 默認為?None

此屬性會匹配保存在?__spec__?對象中的?importlib.machinery.ModuleSpec.parent。

備注

未來的 Python 版本可能停止默認設置此屬性。 為了避免這個潛在變化的影響,如果你明確地需要使用此屬性則推薦改從?__spec__?屬性讀取或是使用?getattr(module,?"__package__",?None)

在 3.4 版更改:?默認為?None。 之前該屬性為可選項。

__spec__

模塊的導入系統相關狀態的記錄。 應當是一個?importlib.machinery.ModuleSpec?的實例。

3.4 新版功能.

types.EllipsisType

Ellipsis?的類型。

3.10 新版功能.

class?types.GenericAlias(t_origin,?t_args)

形參化泛型?的類型,例如?list[int]

t_origin?應當是一個非形參化的泛型類,例如?list,?tuple?或?dict。?t_args?應當是一個形參化?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 版更改:?此類型現在可以被子類化。

參見

泛用別名類型

有關?types.GenericAlias?實例的詳細文檔

PEP 585?- 標準多項集中的類型提示泛型

引入?types.GenericAlias?類

class?types.UnionType

合并類型表達式?的類型。

3.10 新版功能.

class?types.TracebackType(tb_next,?tb_frame,?tb_lasti,?tb_lineno)

回溯對象的類型,如在?sys.exception().__traceback__?中找到的一樣。

請查看?語言參考?了解可用屬性和操作的細節,以及動態地創建回溯對象的指南。

types.FrameType

幀對象的類型,例如?tb.tb_frame?中的對象,其中?tb?是一個回溯對象。

請查看?語言參考?了解可用屬性和操作的細節。

types.GetSetDescriptorType

使用?PyGetSetDef?在擴展模塊中定義的對象的類型,例如?FrameType.f_locals?或?array.array.typecode。 此類型被用作對象屬性的描述器;它的目的與?property?類型相同,但專門針對在擴展模塊中定義的類。

types.MemberDescriptorType

使用?PyMemberDef?在擴展模塊中定義的對象的類型,例如?datetime.timedelta.days。 此類型被用作使用標準轉換函數的簡單 C 數據成員的描述器;它的目的與?property?類型相同,但專門針對在擴展模塊中定義的類。

CPython 實現細節:?在 Python 的其它實現中,此類型可能與?GetSetDescriptorType?完全相同。

class?types.MappingProxyType(mapping)

一個映射的只讀代理。 它提供了對映射條目的動態視圖,這意味著當映射發生改變時,視圖會反映這些改變。

3.3 新版功能.

在 3.9 版更改:?更新為支持?PEP 584?所新增的合并 (|) 運算符,它會簡單地委托給下層的映射。

key?in?proxy

如果下層的映射中存在鍵?key?則返回?True,否則返回?False

proxy[key]

返回下層的映射中以?key?為鍵的項。 如果下層的映射中不存在鍵?key?則引發?KeyError。

iter(proxy)

返回由下層映射的鍵為元素的迭代器。 這是?iter(proxy.keys())?的快捷方式。

len(proxy)

返回下層映射中的項數。

copy()

返回下層映射的淺拷貝。

get(key[,?default])

如果?key?存在于下層映射中則返回?key?的值,否則返回?default。 如果?default?未給出則默認為?None,因而此方法絕不會引發?KeyError。

items()

返回由下層映射的項 ((鍵,?值)?對) 組成的一個新視圖。

keys()

返回由下層映射的鍵組成的一個新視圖。

values()

返回由下層映射的值組成的一個新視圖。

reversed(proxy)

返回一個包含下層映射的鍵的反向迭代器。

3.9 新版功能.

hash(proxy)

返回下層映射的哈希值。

3.12 新版功能.

附加工具類和函數

class?types.SimpleNamespace

一個簡單的?object?子類,提供了訪問其命名空間的屬性,以及一個有意義的 repr。

不同于?object,對于?SimpleNamespace?你可以添加和移除屬性。 如果一個?SimpleNamespace?對象使用關鍵字參數進行初始化,這些參數會被直接加入下層命名空間。

此類型大致等價于以下代碼:

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。 但是,對于結構化記錄類型則應改用?namedtuple()。

3.3 新版功能.

在 3.9 版更改:?repr 中的屬性順序由字母順序改為插入順序 (類似?dict)。

types.DynamicClassAttribute(fget=None,?fset=None,?fdel=None,?doc=None)

在類上訪問 __getattr__ 的路由屬性。

這是一個描述器,用于定義通過實例與通過類訪問時具有不同行為的屬性。 當實例訪問時保持正常行為,但當類訪問屬性時將被路由至類的 __getattr__ 方法;這是通過引發 AttributeError 來完成的。

這允許有在實例上激活的特性屬性,同時又有在類上的同名虛擬屬性 (一個例子請參見?enum.Enum)。

3.4 新版功能.

協程工具函數

types.coroutine(gen_func)

此函數可將?generator?函數轉換為一個返回基于生成器的協程的?coroutine function。 基于生成器的協程仍然屬于?generator iterator,但同時又可被視為?coroutine?對象兼?awaitable。 不過,它沒有必要實現?__await__()?方法。

如果?gen_func?是一個生成器函數,它將被原地修改。

如果?gen_func?不是一個生成器函數,則它會被包裝。 如果它返回一個?collections.abc.Generator?的實例,該實例將被包裝在一個?awaitable?代理對象中。 所有其他對象類型將被原樣返回。

3.5 新版功能.

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/211973.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/211973.shtml
英文地址,請注明出處:http://en.pswp.cn/news/211973.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼規范及開發工具

代碼規范及開發工具: 前端(vscode、idea): JavaScript規范: 1. 谷歌開源項目風格指南:JavaScript 、TypeScript篇 https://zh-google-styleguide.readthedocs.io/en/latest/google-typescript-…

P8625.生命之樹

求最大的子樹之和 維護包含當前節點的最大子樹之和就好了 #include<bits/stdc.h> using namespace std; using ll long long; const int N 1e610; ll w[N]; vector<int>g[N]; ll f[N]; ll res;ll dfs(int u,int father){f[u] w[u];for(auto &t:g[u]){if(tf…

2023.12.10 homework

五年級一元一次方程

C語言作業6

1.聯合體也會完全浪費空間 2.在結構體中 注意好偏移量和實際是第幾個的區別 那個對齊數是和偏移量有關的 (就用我之前的那個就行了) 3. 字節序 才有大小端

參數占位符#{}和${}

#是預處理而$是直接替換 Mybatis在處理#{}時&#xff0c;會將SQL中的#{}替換成占位符&#xff1f;&#xff0c;再使用preparedStatement的set方法來賦值。而Mybatis在處理 時&#xff0c;是將 {}時&#xff0c;是將 時&#xff0c;是將{}直接替換成變量的值 我們分別使用#{}和…

Redis AOF源碼解析

本文取3.0版本分析&#xff08;各個版本差異很大&#xff0c;4.0以上才有aof和rdb混合模式&#xff09; 觸發時機 1、bgrewriteaofCommand函數觸發&#xff0c;即在Redis server服務上運行bgrewriteaof命令。 1-1、當前已經有 AOF 重寫的子進程正在執行&#xff0c;重復執行bg…

JavaScript-Window對象

Window對象 BOM&#xff1a;瀏覽器對象模型 定時器-延時函數 JavaScript內置的一個用來讓代碼延遲執行的函數&#xff0c;setTimeout setTimeout(回調函數&#xff0c;等待的毫秒數);setTimeout僅僅只執行依次&#xff0c;所以可以理解為就是把一段代碼延遲執行&#xff0c…

網絡協議疑點記錄

1.RIP, OSPF,BGP 首先什么是自治系統:治系統就是幾個路由器組成了一個小團體 ?,小團體內部使用專用的協議進行通信,而小團體和小團體之間也使用專用的協議進行通信。 IGP RIP 距離矢量路由算法,bellman-ford算法,每個路由節點知道全局的路由信息,通過和鄰居交換信息得…

五.單行函數

單行函數 1.函數的理解1.1什么是函數1.2不同DBMS函數的差異1.3MySQL的內置函數分類 2.數值函數2.1基本函數2.2角度與弧度互換函數2.3三角函數2.4指數與對數2.5進制間的轉換 3.字符串函數4.日期和時間函數4.1獲取日期、時間4.2日期與時間戳的轉換4.3獲取月份、星期、星期數、天數…

perl處理base64、md5、SHA-1、SHA-256的計算

使用perl可以進行base64、md5、SHA-1、SHA-256的計算&#xff0c;使用也非常方便&#xff0c;下面是示例代碼&#xff1a; #! /usr/bin/perl use v5.14; use MIME::Base64; use Digest;my $test_str hello world;# 測試base64 say encode_base64($test_str);# 測試md5 my $md…

【Copilot】Edge瀏覽器的copilot消失了怎么辦

這種原因&#xff0c;可能是因為你的ip地址的不在這個服務的允許范圍內。你需要重新使用之前出現copilot的ip地址&#xff0c;然后退出edge的賬號&#xff0c;重新登錄一遍&#xff0c;最后重啟edge&#xff0c;就能夠使得copilot側邊欄重新出現了。

【已解決】ModuleNotFoundError: No module named ‘pandas‘

問題描述 ModuleNotFoundError: No module named ‘pandas’ 解決辦法 pip install pandas 完結撒花 熟悉的人相遇&#xff0c;就像久旱等到的甘霖

計算機基礎知識66

Auth的補充 #概念&#xff1a;是django 的一個app&#xff0c;關于用戶的登錄&#xff0c;退出&#xff0c;注冊... # 配置文件中配置&#xff1a;表會被遷移 INSTALLED_APPS [django.contrib.auth,] # auth有哪些表---權限控制&#xff1a; Permission&#xff1a;auth_permi…

Java 中連接 SQL 數據庫

在 Java 中&#xff0c;連接 SQL 數據庫通常使用 JDBC&#xff08;Java Database Connectivity&#xff09;。以下是使用 IntelliJ IDEA 連接 SQL 數據庫的一般步驟&#xff1a; 1. 引入 JDBC 驅動&#xff1a;首先&#xff0c;你需要下載并引入與你所使用的數據庫相對應的 JD…

Linux 導入、導出 MySQL 數據庫命令

一、導出數據庫 1、導出完整數據&#xff1a;表結構數據 mysqldump -u用戶名 -p 數據庫名 > 數據庫名.sql 舉例&#xff1a;以下命令可以導出 abc 數據庫的數據和表結構 /usr/local/mysql/bin/mysqldump -uroot -p abc > abc.sql2、只導出表結構 mysqldump -u用戶名 -p…

用23種設計模式打造一個cocos creator的游戲框架----(十二)狀態模式

1、模式標準 模式名稱&#xff1a;狀態模式 模式分類&#xff1a;行為型 模式意圖&#xff1a;允許一個對象在其內部狀態改變時改變它的行為。對象看起來似乎修改了它的類。 結構圖&#xff1a; 適用于&#xff1a; 1、一個對象的行為決定于它的狀態&#xff0c;并且它必須…

【C語言】字符串函數strcpystrcatstrcmpstrstr的使?和模擬實現

&#x1f308;write in front :&#x1f50d;個人主頁 &#xff1a; 啊森要自信的主頁 ??真正相信奇跡的家伙&#xff0c;本身和奇跡一樣了不起啊&#xff01; 歡迎大家關注&#x1f50d;點贊&#x1f44d;收藏??留言&#x1f4dd;>希望看完我的文章對你有小小的幫助&am…

OCSP檢查數字證書狀態詳解

文章目錄 1. OCSP 的基本原理2. OCSP 的工作流程3. OCSP 的優勢和不足4. OCSP Stapling5. OCSP 配置 OCSP&#xff08;Online Certificate Status Protocol&#xff09;是一種用于檢查數字證書狀態的協議。它提供了一種實時查詢證書狀態的方式&#xff0c;以確定證書是否被吊銷…

prototype、__proto__、constructor、原型、原型鏈

結論&#xff1a; __proto__和constructor屬性是對象所獨有的&#xff1b; prototype屬性是函數所獨有的&#xff0c;由于函數也是一種對象&#xff0c;所以函數也擁有__proto__和constructor屬性&#xff1b;__proto__屬性的作用就是當訪問一個對象的屬性時&#xff0c;如果該…

C++ 多態性(Polymorphism)和 虛函數(Virtual Functions)

在 C 中&#xff0c;多態性&#xff08;Polymorphism&#xff09;是面向對象編程的一個重要概念&#xff0c;它允許通過基類指針或引用來調用派生類對象的特定方法。虛函數&#xff08;Virtual Functions&#xff09;是實現多態性的一種機制&#xff0c;通過在基類中聲明虛函數…