下面这段代码的输出结果将是什么?请解释 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')
