今日作业 day20
1、下面这段代码的输出结果将是什么?请解释。
class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print(Parent.x, Child1.x, Child2.x)
#1,1,1 类中没有该属性,就会去父类中找,child1和child2都是Parent的子类,因此都可以调用Parent中的x
Child1.x = 2
print(Parent.x, Child1.x, Child2.x)
#1,2,1 Child1.x=2 就等于在Child1中创建了一个x属性,寻找的时候优先找自己的属性
Parent.x = 3
print(Parent.x, Child1.x, Child2.x)
#3,2,3 Parent.x=3将原先的值修改为3,因为Child1中本身就有了x属性,只会找自己的x,Child2则会找到Parent中被修改值后的x
2、多重继承的执行顺序,请解答以下输出结果是什么?并解释。
#G->D->A->B
#F->C->B->D->A
#新式类遵循广度优先
3、什么是新式类,什么是经典类,二者有什么区别?什么是深度优先,什么是广度优先?
#新式类:继承object的类都被称之为新式类
#经典类:在python2中,凡是没有继承object的类都是经典类
#深度优先:从第一类开始,一直找到该最后一个父类
#广度优先:不找多各类最后继承的同一个类,直接去找下一个父类
4、用面向对象的形式编写一个老师类, 老师有特征:编号、姓名、性别、年龄、等级、工资,老师类中有功能。
import datetime
import hashlib
import pickle
class Common():
def __init__(self, name, sex, age):
self.name = name
self.sex = sex
self.age =age
def save(self):
with open(f'{self.id}.pkl', 'wb') as f:
pickle.dump(self, f)
def get_obj_by_id(self,id):
return pickle.load(open(f'{id}.pkl', 'rb'))
class Teacher(Common):
def __init__(self, name, sex, age, level, salary):
super().__init__(name, sex, age)
self.level =level
self.salary = salary
def create_id(self):
m = hashlib.md5()
m.update(f'{datetime.datetime.now()}'.encode('utf8'))
m.update(self.name.encode('utf8'))
m.update(self.sex.encode('utf8'))
m.update(self.age.encode('utf8'))
m.update(self.level.encode('utf8'))
m.update(self.salary.encode('utf8'))
self.id = m.hexdigest()
def tell_info(self):
print(f'姓名:{self.name}')
print(f'性别:{self.sex}')
print(f'年龄:{self.age}')
print(f'等级:{self.level}')
print(f'薪资:{self.salary}')
class Student(Common):
def __init__(self, name, sex, age):
super().__init__(name, sex, age)
def create_id(self):
m = hashlib.md5()
m.update(f'{datetime.datetime.now()}'.encode('utf8'))
m.update(self.name.encode('utf8'))
m.update(self.sex.encode('utf8'))
m.update(self.age.encode('utf8'))
self.id = m.hexdigest()
def tell_info(self):
print(f'姓名:{self.name}')
print(f'性别:{self.sex}')
print(f'年龄:{self.age}')
tea1 = Teacher('smile', 'male', '18', '9', '4')
tea1.tell_info()
tea1.create_id()
tea1.save()
print(tea1.get_obj_by_id('a451ea41e5ef41149f50db942f8a0bc4'))
stu1 = Student('momo','female','24')
stu1.tell_info()
stu1.create_id()
stu1.save()
print(stu1.get_obj_by_id('a451ea41e5ef41149f50db942f8a0bc4'))