zoukankan      html  css  js  c++  java
  • 面向对象之多态练习

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


     

     
  • 相关阅读:
    虚拟空间,域名解析,A记录,MX记录,CNAME记录,TTL 等 更多Web服务器相关名词解释
    C# WinForm中的Label换行方法
    SQL 2005 with(nolock)详解
    常用Web Service汇总(天气预报、时刻表等)
    csdn中一篇sock 经验贴..
    如何保护.net中的dll文件(防破解、反编译)
    C#内存流示例>用内存流来读取图片
    QQ网页登陆密码加密方式(农场、空间、WebQQ等通用)
    MySQL数据库对dvbbs.php全文搜索的完全分析
    提搞网站访问速度可做哪些优化
  • 原文地址:https://www.cnblogs.com/hongyongshang/p/6741672.html
Copyright © 2011-2022 走看看