zoukankan      html  css  js  c++  java
  • 练习——面向对象2

    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)


    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()

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

    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、按照定义老师的方式,再定义一个学生类

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

    解答

    1、

    1 1 1

    # 全部继承了父类中的x
    1 2 1

    # Child1 类中添加变量 x = 1, Child1优先搜索自己的变量
    3 2 3

    # 父类中 Child2 继承父类的变量,Child1优先搜索自己的变量

    2、

    G
    D
    A
    B


    F C B D A

    3、

    新式类:

    • 继承了object的类以及该类的子类,都是新式类

    • Python3中所有的类都是新式类

    经典类:

    • 没有继承object的类以及该类的子类,都是经典类

    • 只有Python2中才有经典类

    4.2 经典类

     

    4、

    import time
    import hashlib
    import pickle


    class Parent:
    def __init__(self, name, gender, age):
    self.name = name
    self.gender = gender
    self.age = age

    class Student(Parent):
    def __init__(self,name, gender, age):
    super().__init__(name, gender, age)


    class Teacher(Parent):
    def __init__(self, name, gender, age, level, salary):
    super().__init__(name, gender, age)
    self.level = level
    self.salary = salary


    def create_id(self):
    t = time.time()
    md5 = hashlib.md5
    info = name + gender + str(age) + level + salary
    md5.update(t.encode('utf_8'))
    md5.update(info.encode('utf_8'))
    id = md5.hexdigest()
    return id

    def tell_info(self):
    print(self.id, self.name, self.gender, self.age, self.level, self.salary)

    def save(self):
    with open(f'{self.id}', 'wb') as f:
    pickle.dump(self,f)

    def get_obj_by_id(self, id):
    return pickle.load(open(id, 'rb'))
  • 相关阅读:
    递推数列
    大数阶乘
    成绩排序
    DevC++ return 1 exit status
    POJ 1061 青蛙的约会
    ZOJ 2750 Idiomatic Phrases Game
    nyoj 545 Metric Matrice
    nyoj 308 Substring
    nyoj 515完全覆盖 II
    nyoj 1248 海岛争霸
  • 原文地址:https://www.cnblogs.com/binyuanxiang/p/11649964.html
Copyright © 2011-2022 走看看