如何动态加载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”或“magic”方法是那些以两个下划线为前缀和后缀的方法。这里,“Dunder”一词指的是“Double Under(双下划线)”。通常用于处理运算符重载。magic方法的示例包括“__init__
”,“__add__
”,“__len__
”和“__repr__
”等。
使用“magic”方法__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类的实例。