# 面向对象编程
# 思想:角色抽象、创建类、实例化、操作实例
# 面对对象关键字
# 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的本质是依据调用者节点位置的广度优先顺序来的