python动态导入类

python动态导入类

使用python内置函数 __import__和getattr达到动态导入类的效果

# 首先定义一个Person类
# person_class.py
class Person:
   def __init__(self,name,age):
       self.name = name
       self.age = age
   def showPerson(self):
       print("name:{}\nage:{}".format(self.name,self.age))

if __name__ == "__main__":
   person = Person("Alex",18)
   person.showPerson()

结果:

name:Alex
age:18

从另一个main.py 文件动态导入 person_class.py 中的 Person类

所谓的动态导入是指,可以根据不同的输入导入不同的类,例如,下次可以从 animal_class.py文件中导入 Animal类

import sys
# 定义动态导入类函数
def import_class(import_str):
    mod_str,_seq,class_str = import_str.rpartition(".")
    print(mod_str)  # person_class
    print(_seq)     # .
    print(class_str)# Person

    print(sys.path)
    # 导入模块
    __import__(mod_str)
    print(sys.path)
    # 利用getattr 函数得到 模块中的类
    return getattr(sys.modules[mod_str],class_str)


if __name__ == "__main__":
    # 测试
    import_str = "person_class.Person"
    DynamicClass = import_class(import_str)
    # 打印属性
    person = DynamicClass("Alex",18)  # DynamicClass == Person
    person.showPerson()

结果

name:Alex
age:18

你可能感兴趣的:(python,开发语言)