• day20 作业


    今日作业

    1、下面这段代码的输出结果将是什么?请解释。
    class Parent(object):
      	x = 1
    
    class Child1(Parent):
        pass
    
    class Child2(Parent):
        pass
    
    print(Parent.x, Child1.x, Child2.x)
    Child1.x = 2
    print(Parent.x, Child1.x, Child2.x)
    Parent.x = 3
    print(Parent.x, Child1.x, Child2.x)
    '''1 1 1
       1 2 1
       3 2 3'''
    第一次输出:Child1和Child2都是Parent的子类,继承了x=1,所以输出的都是1
    第二次输出:Child1.x=2是Child1类增加了x这个属性,属性查找时,子类有的不会在到父类中找了,所以结果时1 2 1
    第三次输出:Parent.x=3是将父类中x的值改成3,但是Child1中有x,不会到父类中找,所以父类中x的变化不会影响Child1,所以结果是3 2 3
    
    
    
    2、多重继承的执行顺序,请解答以下输出结果是什么?并解释。
    		class A(object):
    		   def __init__(self):
    		       print('A')
    		       super(A, self).__init__()
    
    		class B(object):
    		   def __init__(self):
    		       print('B')
    		       super(B, self).__init__()
    
    		class C(A):
    		   def __init__(self):
    		       print('C')
    		       super(C, self).__init__()
    
    		class D(A):
    		   def __init__(self):
    		       print('D')
    		       super(D, self).__init__()
    
    		class E(B, C):
    		   def __init__(self):
    		       print('E')
    		       super(E, self).__init__()
    
    		class F(C, B, D):
    		   def __init__(self):
    		       print('F')
    		       super(F, self).__init__()
    
    		class G(D, B):
    		   def __init__(self):
    		       print('G')
    		       super(G, self).__init__()
    
    		if __name__ == '__main__':
    		   g = G()
    		   f = F()
                
     #GDAB
     #FCBDA
     g=G()
    因为A和B没有继承关系,按照广度优先原则,先自己(G),再父类D,再父类D的父类A,再父类B
     f=F()
     因为C和D都继承了A,按照广度优先原则,先自己(F),再父类C,再父类B,再父类D,再父类(C和D)的父类A
    
    
    3、什么是新式类,什么是经典类,二者有什么区别?什么是深度优先,什么是广度优先?
    	继承object的类都是新式类,python3中,子类不继承自定义的类就会默认继承object
    	在python2中,凡是没有继承object的类都是经典类
        继承了object的类都是新式类,没有则是经典类
        深度优先:一条路走到黑
        广度优先:不找多各类最后继承的同一个类,直接去找下一个父类
        
        
    4、用面向对象的形式编写一个老师类, 老师有特征:编号、姓名、性别、年龄、等级、工资,老师类中有功能。
    		1.生成老师唯一编号的功能,可以用hashlib对当前时间加上老师的所有信息进行校验得到一个hash值来作为老师的编号
    			def create_id(self):
    				pass
          
    		2.获取老师所有信息
    			def tell_info(self):
    				pass
    
    		3.将老师对象序列化保存到文件里,文件名即老师的编号,提示功能如下
    			def save(self):
    				with open('老师的编号','wb') as f:
    					pickle.dump(self,f)
    
    		4.从文件夹中取出存储老师对象的文件,然后反序列化出老师对象,提示功能如下
    			def get_obj_by_id(self,id):
    				return pickle.load(open(id,'rb'))
    
    		5、按照定义老师的方式,再定义一个学生类
    #老师        
    import hashlib
    import time
    import  pickle
    
    class Teacher:
        def __init__(self,name,sex,age,level,money):
            self.name=name
            self.sex=sex
            self.age=age
            self.level=level
            self.money=money
    
        def create_id(self):
            t=time.time()
            s=str(t)+self.name+self.sex+str(self.age)+str(self.level)+str(self.money)
            m=hashlib.md5()
            m.update(s.encode('utf-8'))
            self.number=m.hexdigest()
    
        def tell_info(self):
            print(f'''
                  name{self.name}
                  sex{self.sex}
                  age:{self.age}
                  level:{self.level}
                  money:{self.money}
                  number:{self.number}''')
    
        def save(self):
            with open(self.number, 'wb') as f:
                pickle.dump(self, f)
    
        def get_obj_by_id(self):
            return pickle.load(open(self.number, 'rb'))  
    # 学生  
    class Student:
        def __init__(self,name,sex,age,course):
            self.name=name
            self.sex=sex
            self.age=age
            self.course=course
    
        def create_id(self):
            t=time.time()
            s=str(t)+self.name+self.sex+str(self.age)+str(self.course)
            m=hashlib.md5()
            m.update(s.encode('utf-8'))
            self.number=m.hexdigest()
    
        def tell_info(self):
            print(f'''
                  name{self.name}
                  sex{self.sex}
                  age:{self.age}
                  course:{self.course}
                  number:{self.number}''')
    
        def save(self):
            with open(self.number, 'wb') as f:
                pickle.dump(self, f)
    
        def get_obj_by_id(self):
            return pickle.load(open(self.number, 'rb'))
        
    6、抽象老师类与学生类得到父类,用继承的方式减少代码冗余
    import hashlib
    import time
    import  pickle
    
    class People:
        def __init__(self,name,sex,age):
            self.name=name
            self.sex=sex
            self.age=age
    
        def create_id(self):
            t=time.time()
            s=str(t)+self.name+self.sex+str(self.age)
            m=hashlib.md5()
            m.update(s.encode('utf-8'))
            self.number=m.hexdigest()
    
        def tell_info(self):
            print(f'''
                  name{self.name}
                  sex{self.sex}
                  age:{self.age}
                 ''')
    
        def save(self):
            with open(self.number, 'wb') as f:
                pickle.dump(self, f)
    
        def get_obj_by_id(self):
            return pickle.load(open(self.number, 'rb'))
    
    class Teacher(People):
        def __init__(self,name,sex,age,level,money):
            People.__init__(self,name,sex,age)
            self.level=level
            self.money=money
    
    
    class Student(People):
        def __init__(self,name,sex,age,course):
            People.__init__(self,name,sex,age)
            self.course=course
    
    
  • 相关阅读:
    expect script
    2011年11月28日,29日学习内容总结
    2011年11月27日学习内容总结
    Toad使用(转)
    2011年11月30日学习总结
    2011年11月24日学习内容总结
    2010年11月23日学习内容总结
    Toad Can't initialize OCI. Error 1解决办法
    2011年11月25日学习内容总结
    2011年12月1日学习内容总结
  • 原文地址:https://www.cnblogs.com/zqfzqf/p/11649931.html
Copyright © 2020-2023  润新知