python-反射机制案例

120 篇文章 1 订阅
class Web(object):
    def bbs(self):
        return "<h1>bbs</h1>"

    def news(self):
        return "<h1>news</h1>"

    def music(self):
        return "<h1>music</h1>"

    def movie(self):
        return "<h1>movie</h1>"
    # 假设下面还有50个
def run():
    flask = Web()
    # 用户输入url地址: http://www.baidu.com/news
    url = input('url:').split('/')[-1]  # 取拆分后最后一个字符串 例如:news
    if hasattr(flask, url):	# 判断是否有方法url
        return getattr(flask, url)()	#获得方法返回值
    else:
        return '404'


if __name__ == '__main__':
    while True:
        print(run())

在这里插入图片描述

我们还可以运用模块完成:
1)新建一个lib的python package
lib内新建3个模块:
在这里插入图片描述

bbs.py

def index():
    return  'bbs index'


def login():
    return  "bbs login"


def logout():
    return  "bbs logout"

music.py

def index():
    return 'music index'


def login():
    return "music login"


def logout():
    return "music logout"

news,py

def index():
    return 'news index'


def login():
    return "news login"


def logout():
    return "news logout"

init.py

from lib.bbs import  *
from lib.news import  *
from lib.music import  *  #包里只能最后一个模块生效

2)新建一个模块

def run():
    # 用户输入url地址: www.baidu.com/music/index
    # 用户输入url地址: http://www.baidu.com/bbs/login
    modules, func = input('url:').split('/')[-2:]  # 获取目录的倒数两个, 即 music index
    print(modules, func)	#modules=music func=index
    # 倒入一个包含变量的模块名, 其中obj就是导入模块的别名  
    obj = __import__('lib.' + modules)
    print(obj) #<module 'lib' from '/home/kiosk/Documents/python/python1230/lib/__init__.py'>
    if hasattr(obj, func):
        return getattr(obj, func)()
    else:
        return '404:页面找不到'


if __name__ == '__main__':
    while True:
        print(run()) #music index

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值