day20作业
lass Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print(Parent.x, Child1.x, Child2.x)
# 结果:1, 1, 1
# 子类若没有相应属性,回去父类查找
Child1.x = 2
print(Parent.x, Child1.x, Child2.x)
# 结果:1, 2, 1
# 只是修改了子类的属性,不会影响父类的属性
Parent.x = 3
print(Parent.x, Child1.x, Child2.x)
# 结果:3, 3, 3
# 修改了父类的属性,会影响子类属性的查找
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()
#结果 GDAB
f = F()
#结果 FCBDA
新式类就是继承object的类,在python2中没有继承object的类都是经典类。
深度优先是指在属性查找时,由一个父类开始,一直向上查找,直至继承树的顶层,同时遵循从左到右的查找循序。
广度优先是指先在查找某个父类时,先查看是否已经查找过其子类,若没有则后面再查找,同时遵循从左到右的查找循序
import time
import hashlib
import pickle
class Pepole():
def __init__(self, name, age, sex):
self.name = name
self.sex = sex
self.age = age
self.id = self.create_id()
def tell_info(self):
print(f"姓名:{self.name}, 年龄:{self.age}, 性别:{self.sex}, 编号:{self.id}")
def create_id(self):
value = self.name + self.sex + str(self.age) + str(time.time())
md5 = hashlib.md5()
md5.update(value.encode("utf-8"))
return md5.hexdigest()
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"))
class Teacher(Pepole):
def __init__(self, name, age, sex, grade, salary):
Pepole.__init__(self, name, age, sex)
self.grade = grade
self.salary = salary
def tell_info(self):
Pepole.tell_info(self)
print(f"等级:{self.grade}, 工资:{self.salary}")
class Student(Pepole):
def __init__(self, name, age, sex, _class):
Pepole.__init__(self, name, age, sex)
self._class = _class
def tell_info(self):
Pepole.tell_info(self)
print(f"班级:{self._class}")
if __name__ == "__main__":
t1 = Teacher("nick", 18, "male", 9, 3.0)
t1.tell_info()
cc = t1.get_obj_by_id("c9673f7e22eec273ad01850a82cfe01f")
cc.tell_info()
st1 = Student("abc", 17, "male", 12)
st1.tell_info()