如何動態載入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 (下劃線)”。這些方法經常用於處理運算子過載。“__init__”、“__add__”、“__len__”和“__repr__”等都是魔術方法的例子。
使用“魔術”方法__import__是完成此類任務最簡單的方法。事實上,如果你在谷歌上搜索這個問題,這可能是你首先會遇到的方法。基本方法如下:
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類的例項。
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP