如何动态加载 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+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告