如何动态加载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