由“反射”,联想到的动态调用不同模块的函数

复制代码
# !/usr/bin/env python
# -*- coding:utf8 -*-

# from lib import account

# url = input("请模拟输入 url 页面: ")
#
# if url.endswith("login"):
#     r = account.login()
#     print(r)
#
# elif url.endswith("logout"):
#     r = account.logout()
#     print(r)
#
# elif url.endswith("nb"):
#     r = account.nb()
#     print(r)
#
# else:
#     print("404")


# 当account中含有很多的函数体时,当前的主程序 index.py ,就要写很多的elif 条件来判断。
# 而通过“反射”, 根据用户的输入是什么,再去account中调用相应的函数才比较合适

# from lib import account
#
# input_info = input("请模拟输入相应的url: ")
#
# url = input_info.split("/")[-1]
# if hasattr(account, url):
#     target_func = getattr(account, url)
#     r = target_func()
#     print(r)
#
# else:
#     print("404")


"""
上述一个不好的地方是,所有的函数需要都写到单一的模块account中,
但是通常情况下,每个函数是有分类的。
不同种类的模块,包含不同的函数
"""

'''
对上述主程序继续优化
要求用户输入: 模块名/函数名(account/login)
'''

modul_url = input("请输入url:(模块名/函数名)")

target_module, target_func = modul_url.split("/")

# 获取导入的模块
module = __import__("lib." + target_module, fromlist=True)

if hasattr(module, target_func):
    result = getattr(module, target_func)
    ret = result()
    print(ret)

else:
    print("404")
复制代码

 

posted @ 2021-02-17 21:23  xuwenwei  阅读(88)  评论(0)    收藏  举报
编辑推荐:
· C#.Net 筑基-优雅 LINQ 的查询艺术
· 一个自认为理想主义者的程序员,写了5年公众号、博客的初衷
· 大数据高并发核心场景实战,数据持久化之冷热分离
· 运维排查 | SaltStack 远程命令执行中文乱码问题
· Java线程池详解:高效并发编程的核心利器
阅读排行:
· C#.Net筑基-优雅LINQ的查询艺术
· Cursor生成UI,加一步封神
· 一个基于 .NET 8 开源免费、高性能、低占用的博客系统
· 一个字符串替换引发的性能血案:正则回溯与救赎之路
· 接口设计的原则:构建优雅API的完整指南
点击右上角即可分享
微信分享提示