中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python type函數如何動態創建類

發布時間:2020-08-26 16:02:01 來源:億速云 閱讀:312 作者:Leah 欄目:編程語言

Python type函數如何動態創建類?針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

之前學習過使用 type() 函數可以查看變量的類型,但如果想使用 type() 直接查看某個類的類型呢?看如下程序:

class Role:
    pass
r = Role()
# 查看變量r的類型
print(type(r)) # <class '__main__.Role'>
# 查看Role類本身的類型
print(type(Role)) # <class 'type'>

運行上面程序,可以看到如下輸出結果:

<class '__main__.Role'>
<class 'type'>

從上面的輸出結果可以看到,Role 類本身的類型是 type。這句話有點拗口,怎樣理解 Role 類的類型是 type?

從 Python 解釋器的角度來看,當程序使用 class 定義 Role 類時,也可理解為定義了一個特殊的對象(type 類的對象),并將該對象賦值給 Role 變量。因此,程序使用 class 定義的所有類都是 type 類的實例。

實際上 Python 完全允許使用 type() 函數(相當于 type 類的構造器函數)來創建 type 對象,又由于 type 類的實例就是類,因此 Python 可以使用 type() 函數來動態創建類。例如如下程序:

def fn(self):
    print('fn函數')
# 使用type()定義Dog類
Dog = type('Dog', (object,), dict(walk=fn, age=6))
# 創建Dog對象
d = Dog()
# 分別查看d、Dog的類型
print(type(d))
print(type(Dog))
d.walk()
print(Dog.age)

上面第 4 行代碼使用 type() 定義了一個 Dog 類。在使用 type() 定義類時可指定三個參數:

參數一:創建的類名。

參數二:該類繼承的父類集合。由于 Python 支持多繼承,因此此處使用元組指定它的多個父類。即使實際只有一個父類,也需要使用元組語法(必須要多一個逗號)。

參數三:該字典對象為該類綁定的類變量和方法。其中字典的 key 就是類變量或方法名,如果字典的 value 是普通值,那就代表類變量;如果字典的 value 是函數,則代表方法。

由此可見,第 4 行代碼定義了一個 Dog 類,該類繼承了 object 類,還為該類定義了一個 walk() 方法和一個 age 類變量。

運行上面程序,將看到如下輸出結果:

<class '__main__.Dog'>
<class 'type'>
fn函數
6

從上面的輸出結果可以看出,使用 type() 函數定義的類與直接使用 class 定義的類井沒有任何區別。事實上,Python 解釋器在執行使用 class 定義的類時,其實依然是使用 type() 函數來創建類的。因此,無論通過哪種方式定義類,程序最終都是創建一個 type 的實例。

關于Python type函數如何動態創建類問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

中西区| 邵阳市| 深泽县| 万盛区| 新泰市| 麻城市| 布拖县| 邵阳市| 通化市| 龙南县| 勃利县| 泗水县| 剑河县| 育儿| 郑州市| 定日县| 凉城县| 九江县| 达尔| 东阿县| 封开县| 林西县| 桓台县| 泊头市| 许昌市| 长宁县| 九龙县| 汉寿县| 新安县| 新昌县| 屏南县| 内乡县| 临高县| 江门市| 南和县| 塘沽区| 桦南县| 额敏县| 潜江市| 应用必备| 商洛市|