面向对象之多态练习
1.作业一:实现如图的继承关系,然后验证经典类与新式类在查找一个属性时的搜索顺序
#coding:utf8 #载入内存时的编码方式 class B(object): def __init__(self): pass def test(self): print(" I is from B") class C(object): def __init__(self): pass def test(self): print("I is from C") class D(B): def __init__(self): pass def test(self): print("I is from D") class E(C): def __init__(self): pass def test(self): print("I is from E") class F(D,E): def __init__(self): pass def test(self): print("I is from F") f1 =F() f1.test() # 经典类:py2: F--->D--->B--->E-->C 如果此时C也不到,那就直接报错 # 新式类:py2/3 :F-->D-->B--->E--->C--->object 如果此时object也不到,那就直接报错 print (F.mro())
2.作业二:基于多态的概念来实现linux中一切皆问题的概念:文本文件,进程,磁盘都是文件,然后验证多态性
#coding: utf8 import abc class stata(metaclass=abc.ABCMeta): @abc.abstractmethod def read(self): print("发起一个系统调用 打开") @abc.abstractmethod def write(self): print("发起一个系统调用,保存") class cattext(stata): def read(self): super(cattext,self).read() print("cat text") def write(self): super(cattext,self).write() print("write concat in file and wf") class process(cattext): def read(self): super(process,self).read() print("已经打开文件产生pid") def write(self): super(process,self).write(); print("正关闭文件,并删除pid信息") def func_r(obj,file): #统一接口读 obj.read() file.read() def func_w(obj,file): #统一接口写 obj.write() file.write() ca = cattext() p = process() func_r(p,ca) func_w(p,ca) 运行结果 : 发起一个系统调用 打开 cat text 已经打开文件产生pid 发起一个系统调用 打开 cat text 发起一个系统调用,保存 write concat in file and wf 正关闭文件,并删除pid信息 发起一个系统调用,保存 write concat in file and wf # func_r(p) # func_r(ca) # func_w(ca) # func_w(p) # catfile = cattext() # p = process() # catfile.read() # p.read() # catfile.write() # p.write()
3.作业三:定义老师类,把老师的属性:薪资,隐藏起来,然后针对该属性开放访问接口
苑昊老师有多种癖好,把这种癖好隐藏起来,然后对外提供访问接口
而且以后还会苑昊老师培养很多其他的癖好,对外开放修改接口,可以新增癖好,并且需要
保证新增的癖好都是字符串类型,否则无法增加成功。
#coding:utf8 class Teacher(object): __salary = 18000 def __init__(self,name,age): self.name = name self.age = age def getSalary(self): """薪资""" return ("%s 同学的薪资为 %d"%(self.name,self.__salary)) def __Mania(self,piter = []): """癖好""" self.piter = piter return self.piter def getMania(self,Mania_value): """得到癖好""" self.Mania_value = Mania_value if type(self.Mania_value) == list: for v in self.Mania_value: if type(self.__Mania()) == str: self.__Mania().append(v) for i in self.__Mania(Mania_value): print(i) tea1 = Teacher('苑昊',20) print(tea1.getSalary()) print("请输入%s" %tea1.name + "的喜好") print("%s: \n有如下爱好:" % (tea1.name,)) tea1.getMania(["溜口秀","大保健","沾蜜枣"]) tea1.getMania(["1溜","1大健","沾蜜"]) 运行结果: 苑昊 同学的薪资为 18000 请输入苑昊的喜好 苑昊: 有如下爱好: 溜口秀 大保健 沾蜜枣 1溜 1大健 沾蜜