day24继承
# 面向对象编程 # 思想:角色抽象、创建类、实例化、操作实例 # 面对对象关键字 # class 类名: # 静态属性='aaa' # def __init__(self): # pass # 类名。静态属性——存储在类的命名空间里 # 对象=类名()——实例化 # 对象.属性 # 对象.方法=类名.方法(对象) # 对象可以使用静态变量 # 类不可以使用对象里的属性 # 组合 # 一个类的对象是另一个类对象的属性 # class A: # def __init__(self): # self.name = 'egon' # # # class B: # def __init__(self, year, month, day): # self.year = year # self.month = month # self.day = day # # # b = B(18, 7, 1) # a = A() # a.birth = b # print(a.birth.year) # 这就是组合 # 类的继承 # class A(object): # 父类,基类,超类 # pass # # # class B: # 父类,基类,超类 # pass # # # class A_son(A): # 子类、派生类 # pass # # # class AB_son(A, B): # 子类、派生类 # pass # # # # 一个类可以被多个类继承 # # 一个类可以继承多个父类 # print(A_son.__bases__) # 此方法可以查看父类 # print(A_son.__bases__) # print(A.__bases__) # python3-新式类——没有继承默认继承object # class Animal: # def __init__(self, name, aggr, hp): # self.name = name # self.aggr = aggr # self.hp = hp # self.func() # # def func(self): # print('123') # # # class Dog(Animal): # def func(self): # print(456) # # def bite(self, person): # person.hp -= self.aggr # # # class Person(Animal): # pass # # # jin = Dog('金老板', 200, 500) # print(jin.name) # # # class Animal: # def __init__(self, name, aggr, hp): # self.name = name # self.aggr = aggr # self.hp = hp # # def eat(self): # print('吃药回血') # self.hp += 100 # # # class Dog(Animal): # def __init__(self, name, aggr, hp, kind): # Animal.__init__(self, name, aggr, hp) # self.kind = kind # 派生属性 # # def eat(self): # Animal.eat(self) # 如果要使用父类中的功能,则要在子类中调用父类 # self.teeth = 2 # # def bite(self, person): # 派生方法 # person.hp -= self.aggr # # # jin = Dog('金老板', 100, 500, '吉娃娃') # jin.eat() # print(jin.hp) # # # class Person(Animal): # def __init__(self, name, aggr, hp, sex): # Animal.__init__(self, name, aggr, hp) # self.sex = sex # 派生属性 # self.money = 0 # 派生属性 # # def attack(self, dog): # dog.hp -= self.aggr # # # alex = Person('alex', 1, 2, None) # alex.eat() # print(alex.hp) # 继承顺序 # python3:广度优先 # python2:深度优先 # super的本质是依据调用者节点位置的广度优先顺序来的