如何動態載入 Python 類?


一個是一組專案的集合。它是一個邏輯實體,具有一些獨特的屬性和方法。例如,如果您有一個關於板球的類,它應該具有諸如球員、錦標賽、拋硬幣、得分、擊球次數、比賽等屬性和方法。使用關鍵字“class”來建立類。

示例:以下是一個簡單的類示例 -

建立名為“Python”的類並賦予其屬性 a -

class Python: 
a = 36

本文演示了動態載入 Python 類的幾種不同方法。

使用 getattr() 函式

物件的getattr()方法的命名屬性返回其值。如果未檢測到任何內容,則返回函式的預設值。

示例

要載入名為 module_name 的模組,請執行命令 Call_import_(module_name)。要從模組載入名為 method_name 的方法,請呼叫 get_attr(module, method_name)。

# importing the module numpy numpy = __import__("numpy") # importing an array from numpy array = getattr(numpy, "array") the_array = array([[34, 28], [38, 37]]) print(the_array)

輸出

以下是上述程式碼的輸出 -

[[34 28]
[38 37]]

示例

目前還沒有可用的函式可以接受完全限定的類名並返回該類。但是我們可以開發一個執行此功能的函式。以下示例定義了這樣一個函式 -

def my_class(x): groups = x.split('.') module = ".".join(groups[:-1]) a = __import__( module ) for comp in groups[1:]: a = getattr(b, comp) return a

該函式用法的一個示例如下 -

import datetime def my_class(x): groups = x.split('.') module = ".".join(groups[:-1]) b = __import__( module ) for comp in groups[1:]: b = getattr(b, comp) return b print (my_class('datetime.datetime').now())

輸出

以下是上述程式碼的輸出 -

2022-11-16 06:53:13.513141

使用 __import__( ) 方法

Python 的“dunder”或“魔法”方法是指以兩個下劃線作為方法的字首和字尾的方法。這裡,“Dunder”指的是“Double Under (Underscores)”。這些方法通常用於處理運算子過載。魔法方法的示例包括“__init__”、“__add__”、“__len__”和“__repr__”等等。

使用“魔法”方法 __import__ 是完成此類任務的最簡單方法。事實上,如果您在 Google 上搜索此問題,這可能是您首先會遇到的方法。基本方法如下 -

module = __import__(module_name) 
given_class = getattr(module, Class_Name) 
instance = given_class()

在上面的程式碼中,class_name 和 module_name 都必須是字串。如果要匯入的類需要提供任何引數,則必須包含該邏輯。

示例

為了讓您更好地理解其工作原理,這裡有一個更詳細的示例 -

class DynamicImporter: def __init__(self, module_name, class_name): # The Constructor module = __import__(module_name) the_class = getattr(module, class_name) instance = the_class() print (instance) if __name__ == "__main__": DynamicImporter("decimal", "Context")

輸出

以下是上述程式碼的輸出 -

Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])

這表明程式碼按預期工作,因為它匯入了 decimal 並返回了一個 Context 類例項。

更新於: 2022年11月23日

4K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.