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)

猜你喜欢

转载自www.cnblogs.com/fwzzz/p/11651210.html