当前位置 : 主页 > 手机开发 > 其它 >

days20

来源:互联网 收集:自由互联 发布时间:2021-06-19
下面这段代码的输出结果将是什么?请解释 class Parent(object): x = 1class Child1(Parent): passclass Child2(Parent): passprint(Parent.x, Child1.x, Child2.x)Child1.x = 2print(Parent.x, Child1.x, Child2.x)Parent.x = 3print(Par

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

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,之后Child1.x = 2被赋值了,就不用找父类Parent查找,Child2还是没有对应的对象属性,依然去父类Parent查找,父类Parent改变,Child2也相应改变

'''

多重继承的执行顺序,请解答以下输出结果是什么?并解释。

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

f = F()     F-->C-->B-->D-->A

在python3中,子类不继承自定义的类,默认继承object,所有的类都是新式类,新式类广度优先
'''

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

'''
新式类:
        继承object的类都称之为新式类.

经典类:
        在python2中,凡是没有继承object的类都是经典类.
        
区别:有没有继承object的类  

深度优先: 先找多继承的第一个,一条路走到黑,一直找到最后,再返回找多继承的第二个

广度优先: 不找多各类最后继承的同一个类,直接去找下一个父类,形状类似棱形
        
'''

面向对象的形式编写

'''
用面向对象的形式编写一个老师类, 老师有特征:编号、姓名、性别、年龄、等级、工资,老师类中有功能。
1.生成老师唯一编号的功能,可以用hashlib对当前时间加上老师的所有信息进行校验得到一个hash值来作为老师的编号
2.获取老师所有信息
3.将老师对象序列化保存到文件里,文件名即老师的编号
4.从文件夹中取出存储老师对象的文件,然后反序列化出老师对象
'''

import pickle
import datetime
import hashlib

class Teacher:

    def __init__(self,name, age, sex, level, sal,teacher_id=None):
        self.name = name
        self.age = age
        self.sex = sex
        self.level = level
        self.sal = sal
        self.teacher_id = teacher_id

    # 生成老师唯一编号的功能
    def create_id(self):
        msg = f'{datetime.datetime.now()}+{self.name}+{self.sex}+{self.age}'
        self.teacher_id = hashlib.md5(msg.encode('utf-8')).hexdigest()
        return  self.teacher_id

    # 获取老师所有信息
    def tell_info(self):
        return self.__dict__

    # 将老师对象序列化保存到文件里,文件名即老师的编号
    def save(self):
        with open(f'{self.teacher_id}', 'wb') as f:
            pickle.dump(self, f)

    # 从文件夹中取出存储老师对象的文件,然后反序列化出老师对象
    def get_obj_by_id(self):
        return pickle.load(open(f'{self.teacher_id}', 'rb'))
# 按照定义老师的方式,再定义一个学生类
class Student:
    def __init__(self, name, age, sex, course, teacher_id=None):
        self.name = name
        self.age = age
        self.sex = sex
        self.course = course
        self.teacher_id = teacher_id
    
    # 生成学生唯一编号的功能
    def create_id(self):
        msg = f'{datetime.datetime.now()}+{self.name}+{self.sex}+{self.age}'
        self.student_id = hashlib.md5(msg.encode('utf-8')).hexdigest()
        return  self.student_id        
        
    # 将学生对象序列化保存到文件里,文件名即学生的编号
    def save(self):
        with open(f'{self.student_id}', 'wb') as f:
            pickle.dump(self, f)

    # 从文件夹中取出存储老师对象的文件,然后反序列化出学生对象
    def get_obj_by_id(self):
        return pickle.load(open(f'{self.student_id}', 'rb'))        

    # 学生可以选择课程
    def choose_course(self, course):
        print(f'学生[{self.name}]选择课程[{course}]')
# 抽象老师类与学生类得到父类,用继承的方式减少代码冗余
class People:

    def __init__(self, name, age, sex, people_id=None):
        self.name = name
        self.age = age
        self.sex = sex
        self.people_id = people_id
        self.create_id()
        self.save()
        self.get_obj_by_id()

    def create_id(self):
        msg = f'{datetime.datetime.now()}+{self.name}+{self.sex}+{self.age}'
        self.people_id = hashlib.md5(msg.encode('utf-8')).hexdigest()
        return  self.people_id
    
    def save(self):
        with open(f'{self.people_id}', 'wb') as f:
            pickle.dump(self, f)
            
    def get_obj_by_id(self):
        return pickle.load(open(f'{self.people_id}', 'rb'))
    

class Teacher(People):
    def __init__(self, name, age, sex, level, salary, people_id=None):
        super().__init__(name, age, sex, people_id=None)
        self.level = level
        self.salary = salary

    def tell_info(self):
        return self.__dict__
    
    
class Student(People):
    def __init__(self, name, age, sex, course, people_id=None):
        super().__init__(name, age, sex, people_id=None)
        self.course = course

  def choose_course(self, course):
        print(f'学生[{self.name}]选择课程[{course}]')
        
        
        
        

tea1 = Teacher('tank', 17 , 'male', 1 , 6000)
print(tea1.name)
stu1 = Student('jzm', 20 , 'male', 'python')
网友评论