您好,登錄后才能下訂單哦!
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函數如何動態創建類問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業資訊頻道了解更多相關知識。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。