类__依赖关系(相关练习)
1)看代码写结果
class F3(object): def f1(self): ret = super().f1() # super()执行继承体系(MRO)中的下一个 print(ret) return 123 class F2(object): def f1(self): print('123') class F1(F3, F2): # F1, F3, F2 pass obj = F1() obj.f1() ''' 123 None '''
2)__all__的使用:
class StarkConfig(object): def __init__(self, num): self.num = num def __call__(self, *args, **kwargs): print(self.num) class RoleConfig(StarkConfig): def __call__(self, *args, **kwargs): print(self.num) v1 = StarkConfig(1) # __init__ v2 = RoleConfig(11)# __init__ v1() # __call__ 1 v2() # __call__ 11
模块中不使用__all__属性,则导入模块内的所有公有属性,方法和类 。 模块中使用__all__属性,则表示只导入__all__中指定的属性,因此,使用__all__可以隐藏不想被import的默认值。 __all__变量是一个由string元素组成的list变量。 它定义了当我们使用 from <module> import * 导入某个模块的时候能导出的符号(这里代表变量,函数,类等)。 from <module> import * 默认的行为是从给定的命名空间导出所有的符号(当然下划线开头的变量,方法和类除外)。 需要注意的是 __all__ 只影响到了 from <module> import * 这种导入方式, 对于 from <module> import <member> 导入方式并没有影响,仍然可以从外部导入。
3)学生选课系统
# 1. 完成学生选课系统. (升级题) class Student: def __init__(self,sno,sname): self.sno = sno self.sname = sname self.cour_list = [] def chakan(self): for c in self.cour_list: print(f"{self.sname}选了{c.cname}") def tianjia(self,cour): self.cour_list.append(cour) class Course: def __init__(self,cno,cname,teacher=None): self.cno = cno self.cname= cname self.teacher = teacher def chakan(self): print(f"{self.cno},{self.cname},{self.teacher.tname}") def shezhilaoshi(self,teacher): self.teacher=teacher class Teacher: def __init__(self,tno,tname,tphone): self.tno = tno self.tname = tname self.tphone = tphone ''' 请完成以上三个类. 创建6个课程, 6个老师. 给课程安排好老师. 然后创建30个学⽣. 每个学⽣随机被分配3个课程. 最终显⽰出这三⼗个学⽣的选课情况以及任课老师的电话 ''' from random import randint c1 = Course("01", "抽烟") c2 = Course("02", "喝酒") c3 = Course("03", "烫头") c4 = Course("04", "点烟") c5 = Course("05", "倒酒") c6 = Course("06", "给人烫头") t1 = Teacher("01", "唐伯虎", "13301122001") t2 = Teacher("02", "祝枝山", "13301122002") t3 = Teacher("03", "文征明", "13301122003") t4 = Teacher("04", "李白", "13301122004") t5 = Teacher("05", "黄冠", "13301122005") t6 = Teacher("06", "谢晋", "13301122006") # 给课程设置老师 c1.shezhilaoshi(t1) c2.shezhilaoshi(t2) c3.shezhilaoshi(t3) c4.shezhilaoshi(t4) c5.shezhilaoshi(t5) c6.shezhilaoshi(t6) c_lst = [c1, c2, c3, c4, c5, c6] stu_lst = [] for i in range(30): # 循环30次. stu = Student(i,"学生"+str(i))# 创建30个学生 # 生成随机的三个数字. 对应的是三个课程索引 s = set() while len(s)<3: s.add(randint(0,5)) # 把随机的三个课程索引对应的课程设置给学生 for n in s: stu.tianjia(c_lst[n]) stu_lst.append(stu) # 加到列表 # 显示学生的选课情况以及老师的电话 for s in stu_lst: print(f"学生编号:{s.sno}, 学生姓名:{s.sname}") # 拿到学生的课程信息 for c in s.cour_list: print(f"\t课程编号:{c.cno}, 课程名称: {c.cname}, 任课老师的电话是:{c.teacher.tphone}")