博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python之反射--选课例子
阅读量:6220 次
发布时间:2019-06-21

本文共 2241 字,大约阅读时间需要 7 分钟。

在这个例子中用到了反射和枚举的用法,里面有各种注意事项,是个不错的练习题

total_couese_list = []  # 把函数run中的变量当成全局变量放在这里class Course():    def __init__(self, name, price, period):        self.name = name        self.price = price        self.period = period    func_list = [{"text": "选课", "name": "select_course", "param": "cs"},                 {"text": "查看课程", "name": "show_selectd_course", "param": "None"},                 {"text": "删除课程", "name": "del_selectd_course", "param": "None"},                 ]class Student():    def __init__(self, name):        self.name = name        self.course = []    def select_course(self, ):        """选择课程,已选则不能再选"""  # 当选课的时候,把所选课程都罗列出来,同下面主函数中的枚举一样        for i, iterm in enumerate(total_couese_list, 1):  # 枚举传参数,前面是可迭代对象,后面是序号,默认从几开始            print(i, iterm.name, )  # 因为加入到列表中的是一个对象,对象取值只能通过“.属性”这种方法        num = input("请输入你要选的课程")        num = num - 1        course_obj = total_couese_list[num]        if course_obj not in self.course:            self.course.append(course_obj)    def show_selectd_course(self):        """查看已选择的课程"""    def del_selectd_course(self):        """删除已选择的课程"""def run():    """    主程序        1,根据Course类创建10个课程        2,用户输入姓名,动态创建学生对象        3,查看所选课程        4,为学生选课        5,删除已选课程    :return:    """    # total_couese_list=[]                     #把total_couese_list当成全局变量    for i in range(10):        obj = Course('XX-%s' % i, 90, 90)        total_couese_list.append(obj)  # 添加到列表中的是10个实例    stu_name = input("请输入学生姓名:")  # 这两个一起写就可以实列化一个对象,这本来没有什么了不起,    stu = Student(stu_name)  # 但是养成一种习惯就代表了一种思路    for key, iterm in enumerate(Course.func_list, 1):  # 枚举传参数,前面是可迭代对象,后面是序号,默认从几开始        print(key, iterm["text"])  # 拿到Course中的字符串,准备做反射    while True:   #***while这个逻辑关系是写在fun中的,whil要是顶格写后面的实例stu就不能识别了,在这出过错,太坑了        num = int(input("请输入要执行的功能序号:"))        num = num - 1        name = Course.func_list[num]["name"]  # 通过枚举的提示,在借助用户的输入和枚举关联起来        print(name)  # 现在的name值是取到的要执行的功能的名字,只是个字符串而已        act1 = getattr(stu, name)  # 通过反射取到Student类中的对应方法,具体取哪个方法是用户输入序号,通过枚举关联到字符串取值的        print(act1())  # 上面取到的是一个函数名        # 通过反射取到的类中的方法怎么传参?主要看反射取值的时候传参是类还是对象,在就是缩进,缩进        #写错了,逻辑就乱了        act1()if __name__ =="__main__":    run()

 

转载于:https://www.cnblogs.com/zhuhaofeng/p/9570004.html

你可能感兴趣的文章
数学函数最小值为什么可以通过导数=0来求出呢?
查看>>
计算机操作系统(三)--- 处理器体系结构(一)
查看>>
poj1564
查看>>
poj1081
查看>>
poj1731
查看>>
day10:vcp考试
查看>>
BestCoder Round #74 (div.2)
查看>>
Kruskal HDOJ 1863 畅通工程
查看>>
解决MyEclipe出现An error has occurred,See error log for more details的错误
查看>>
BZOJ4942 & UOJ314:[NOI2017]整数——题解
查看>>
109.110.100.56 samba用户名 PAS, 密码 111111
查看>>
MySql的replace into 语句
查看>>
410. Split Array Largest Sum
查看>>
转 Python爬虫实战二之爬取百度贴吧帖子
查看>>
hdu 4960 记忆化搜索 DP
查看>>
layuiadmin更新echarts
查看>>
beanstalk源码剖析——概述
查看>>
[转] socket异步编程--libevent的使用
查看>>
linux下安装mysql详细步骤
查看>>
ASP.NET根据URL生成网页缩略图示例程序(C#语言)
查看>>