类__依赖关系(相关练习)

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}")

 

posted @ 2018-12-20 20:24  Tank-Li  阅读(186)  评论(0编辑  收藏  举报