zoukankan      html  css  js  c++  java
  • 1010 作业

    1、下面这段代码的输出结果将是什么?请解释。

    class Parent(object):
      	x = 1
    
    class Child1(Parent):
        pass
    
    class Child2(Parent):
        pass
    
    print(Parent.x, Child1.x, Child2.x)
    # 打印111,对象没有向子类查找,子类没有向父类查找,所以x都是1
    
    Child1.x = 2
    print(Parent.x, Child1.x, Child2.x)
    # 打印121,这里添加Child1的变量x变为2,所以打印Child1.x 为2
    
    
    Parent.x = 3
    print(Parent.x, Child1.x, Child2.x)
    # 打印323,这里又将Parent.x修改为3,但是Child1.x 还是2
    
    

    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()
                
    '''
    g=G()	输出 G-D-A-B   
    这里D B不是继承同一个类,所以不需要找下一个类
    
    f=F()	输出 F-C-B-D-A
    这里因为 C D 继承同一个类,所以遵循广度优先,A最后查找
    

    3、什么是新式类,什么是经典类,二者有什么区别?什么是深度优先,什么是广度优先?

    '''
    新式类:
        python3中所有的类都是新式类,python2中继承object的类
        新式类是广度优先:
        	不找多个类最后继承的统一一个类,直接去找下一个父类
            
    经典类:
        python2中才有经典类,凡是没有继承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,salary):
    
            self.name = name
            self.sex = sex
            self.age = age
            self.level =level
            self.salary = salary
    
        def create_id(self):
            '''生成老师唯一编号的功能,可以用hashlib对当前时间加上老师的所有信息进行校验得到一个hash值来作为'''
            format_time = time.strftime("%Y-%m-%d %X")
            data = format_time + self.name + str(self.age) + self.level + self.sex + str(self.salary)
            # 对data 进行哈希处理
            m = hashlib.md5(data.encode('utf-8'))
    
            self.id = m.hexdigest()
            return self.id
    
    
        def tell_info(self):
            '''获取老师的所有信息'''
            print(f'''
            {self.id}
            {self.name}
            {self.age}
            {self.sex}
            {self.level}
            {self.salary}
            ''')
    
        def save(self):
            '''将老师对象序列化保存到文件里,文件名即老师的编号'''
            with open(self.id, 'wb') as f:
                pickle.dump(self, f)
    
    
        def get_obj_by_id(self):
            '''从文件夹中取出存储老师对象的文件,然后反序列化出老师对象'''
            return pickle.load(open(self.id, 'rb'))
    
    tea = teacher('淡淡的悲哀','female',18,'SSS',3000)
    tea.create_id()   # 调用id函数
    tea.tell_info()     # 打印信息
    tea.save()
    fl = tea.get_obj_by_id()
    print(fl)
    
    # 定义学生类
    class student:
        def __init__(self,name,sex,age):
    
            self.name = name
            self.sex = sex
            self.age = age
    
        def create_id(self):
            '''生成学生唯一编号的功能'''
            format_time = time.strftime("%Y-%m-%d %X")
            data = (format_time + self.name + str(self.age) + self.sex)
            # 对data 进行哈希处理
            m = hashlib.md5(data.encode('utf-8'))
    
            self.id = m.hexdigest()
            return self.id
    
    
        def tell_info(self):
            '''获取学生的所有信息'''
            print(f'''
            {self.id}
            {self.name}
            {self.age}
            {self.sex}
            ''')
    
    
        def save(self):
            '''将学生对象序列化保存到文件里,文件名即学生的编号'''
            with open(self.id, 'wb') as f:
                pickle.dump(self, f)
    
    
        def get_obj_by_id(self):
            '''从文件夹中取出存储学生对象的文件,然后反序列化出学生对象'''
            return pickle.load(open(self.id, 'rb'))
    
    stu = student('哈哈哈哈哈','male',100)
    stu.create_id()   # 调用id函数
    stu.tell_info()     # 打印信息
    stu.save()
    tl = stu.get_obj_by_id()
    print(tl)
    

    6、抽象老师类与学生类得到父类,用继承的方式减少代码冗余

    '''将函数体继承'''
    class OldPeople:
        '''定义公用基类'''
        def __init__(self,name,sex,age):
            '''共同具有的属性'''
            self.name = name
            self.sex = sex
            self.age = age
    
        '''以下为共有的方法'''
        def create_id(self):
            '''生成唯一编号的功能'''
            format_time = time.strftime("%Y-%m-%d %X")
            data = (format_time + self.name + str(self.age) + self.sex)
            # 对data 进行哈希处理
            m = hashlib.md5(data.encode('utf-8'))
    
            self.id = m.hexdigest()
            return self.id
    
        # 这里解决不了打印,学生打印比老师少,变量不一样,只能放在各自的类中
        # def tell_info(self):
        #     '''获取所有信息'''
        #     print(f'''
        #     {self.id}
        #     {self.name}
        #     {self.age}
        #     {self.sex}
        #     ''')
    
        def save(self):
            '''将对象序列化保存到文件里,文件名即编号'''
            with open(self.id, 'wb') as f:
                pickle.dump(self, f)
                
        def get_obj_by_id(self):
            '''从文件夹中取出存储对象的文件,然后反序列化出对象'''
            return pickle.load(open(self.id, 'rb'))
    
    
    '''定义学生类'''
    class Student(OldPeople):
    
        def __init__(self,name,sex,age):
            '''学生类的所有参数'''
            OldPeople.__init__(self,name,sex,age)
    
        '''打印学生信息'''
        def tell_info(self):
            '''获取所有信息'''
            print(f'''
            {self.id}
            {self.name}
            {self.age}
            {self.sex}
            ''')
    
    '''定义老师类'''
    class Teacher(OldPeople):
        '''传入所有的参数属性'''
        def __init__(self,name,sex,age,level,salary):
            '''从符类中继承的属性'''
            OldPeople.__init__(self,name,sex,age)
            '''自定义教师类的属性'''
            self.level = level
            self.salary = salary
    
        '''打印教师的信息,多了几个属性'''
        def tell_info(self):
            '''获取所有信息'''
            print(f'''
            {self.id}
            {self.name}
            {self.age}
            {self.sex}
            {self.level}
            {self.salary}
            ''')
    
    ter1 =Teacher('淡淡的悲哀','female',18,'SSS',3000)
    ter1.create_id()   # 调用id函数
    ter1.tell_info()     # 打印信息
    ter1.save()         # 进行保存
    
    print( ter1.get_obj_by_id() ) 
    # <__main__.Teacher object at 0x000001C3E97B7668>
    
    
    stu1 = Student('哈哈哈哈哈','male',100)
    stu1.create_id()   # 调用id函数
    stu1.tell_info()     # 打印信息
    stu1.save()
    stu = stu1.get_obj_by_id()
    print(stu)
    
  • 相关阅读:
    ckeditor+粘贴word
    java+批量下载大文件
    链接批量下载文件
    java+大文件上传解决方案
    php+提高大文件上传速度
    富文本粘贴word文档内容图片处理
    软件开发工具(三)——理论与开发过程
    c结构体里的数组与指针
    Java解析Property文件
    怎样高速编译mediatekoperator以下代码
  • 原文地址:https://www.cnblogs.com/fwzzz/p/11651210.html
Copyright © 2011-2022 走看看