面向对象之多态练习

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象之多态练习相关的知识,希望对你有一定的参考价值。

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大健
沾蜜

 


 

 

以上是关于面向对象之多态练习的主要内容,如果未能解决你的问题,请参考以下文章

Java面向对象练习题多态测试

Java面向对象三大特征之继承和多态

面向对象之:封装,多态

Java面向对象之多态

java学习笔记之面向对象多态

python------面向对象介绍之多态实例