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()
原文地址:https://www.cnblogs.com/YajunRan/p/11650343.html