黑马程序员技术交流社区

标题: python 通过反射获取配置文件 中的类 [打印本页]

作者: lalah    时间: 2019-7-28 14:16
标题: python 通过反射获取配置文件 中的类
首先目录结构,conf文件夹的settings.py配置文件中配置两个类路径,写一段程序读取这个配置文件,并将类路径实例化成对象执行相关功能.
1.配置文件 settings.py:

MODE = "RAYLU"

FUNC = {
    "customer":"src.customer.Customer",
    "sales":"src.sales.Sales",
}
2.配置文件中配置的两个类Customer和Sales文件

class Customer(object):
    def __init__(self):
        pass

    def run(self):
        print("")
        return "i am customer"
class Sales(object):
    def __init__(self):
        pass

    def run(self):
        print("")
        return "i am sales"
3.读取配置文件内容,并通过反射方式实例化类对象

# import sys,os
# curPath = os.path.abspath(os.path.dirname(__file__))
# rootPath = os.path.split(curPath)[0]
# print(rootPath)
# sys.path.append(rootPath)

from reflect.conf.settings import FUNC
from reflect.conf.settings import MODE
import importlib,re

print(MODE)
for k,v in FUNC.items():
    #
    # ret_v = v.split(".")
    # ret=ret_v[0]
    # cls_name = ret_v[-1]
    # for item in range(1,len(ret_v)-1):
    #     ret+= "."+ret_v[item]
    #上面代码简写:
    ret,cls_name = v.rsplit(".",maxsplit=1) # rsplit()从最后边开始往前分割  #splitlines()通过换行符进行分割
    print(ret,cls_name)

    m = importlib.import_module(ret) #导入文件模块
    cls = getattr(m,cls_name) #通过getattr()获取模块内容,获取类名
    response = cls().run() #创建类对象并执行对象函数,获取想要的结果
    print(response)


作者: 柠檬leung不酸    时间: 2019-7-29 10:21
棒~
作者: 柠檬leung不酸    时间: 2019-7-29 10:21

作者: 柠檬leung不酸    时间: 2019-7-31 15:12

作者: 柠檬leung不酸    时间: 2019-8-1 18:07





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2