• 面向对象之多态练习


    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: 
    有如下爱好:" % (tea1.name,))
    tea1.getMania(["溜口秀","大保健","沾蜜枣"])
    tea1.getMania(["1溜","1大健","沾蜜"])
    运行结果:
    苑昊 同学的薪资为 18000
    请输入苑昊的喜好
    苑昊: 
    有如下爱好:
    溜口秀
    大保健
    沾蜜枣
    1溜
    1大健
    沾蜜
    


     

     
  • 相关阅读:
    回顾2018,展望2019
    NLog日志框架使用探究-1
    基于NetMQ的TLS框架NetMQ.Security的实现分析
    鸟哥的Linux私房菜笔记第五章,文件权限与目录配置(二)
    鸟哥的Linux私房菜笔记第五章,文件权限与目录配置(一)
    鸟哥的Linux私房菜笔记第四章
    ThinkPHP5.1 + tufanbarisyildirim 解析apk
    Java核心技术第八章——泛型程序设计(1)
    Java核心技术第五章——2.Object类
    Java核心技术第五章——1.类、超类、子类(2)
  • 原文地址:https://www.cnblogs.com/hongyongshang/p/6741672.html
Copyright © 2020-2023  润新知