Python——面向对象的特性
1、继承
定义:继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类
class A:pass #父类,基类,超类 class B:pass #父类,基类,超类 class A_son(A):pass #子类,派生类 class AB_son(A,B):pass #子类,派生类 #一个类 可以被多个类继承 #一个类 可以继承多个父类 ——Python里 print(A_son._base_) #查看从哪里继承的
继承类实例
#继承类案例 class Animal: def _init_(self,name,aggr,hp): self.name = name self.aggr = aggr self.hp = hp class Dog(Animal): def bite(self,preson): person.hp -= self.agg class Person(Animal): pass jin = Dog('ABV',200,500) print(jin.name)
2、派生
当然子类也可以添加自己新的属性或者在自己这里重新定义这些属性(不会影响到父类),需要注意的是,一旦重新定义了自己的属性且与父类重名,那么调用新增的属性时,就以自己为准了。
class Animal: ''' 人和狗都是动物,所以创造一个Animal基类 ''' def __init__(self, name, aggressivity, life_value): self.name = name # 人和狗都有自己的昵称; self.aggressivity = aggressivity # 人和狗都有自己的攻击力; self.life_value = life_value # 人和狗都有自己的生命值; def eat(self): print('%s is eating'%self.name) class Dog(Animal): ''' 狗类,继承Animal类 ''' def bite(self, people): ''' 派生:狗有咬人的技能 :param people: ''' people.life_value -= self.aggressivity class Person(Animal): ''' 人类,继承Animal ''' def attack(self, dog): ''' 派生:人有攻击的技能 :param dog: ''' dog.life_value -= self.aggressivity egg = Person('egon',10,1000) ha2 = Dog('二愣子',50,1000) print(ha2.life_value) print(egg.attack(ha2)) print(ha2.life_value)
父类中没有的属性 在子类中出现 叫做派生属性
父类中没有的方法 在子类中出现 叫做派生方法
只要在子类的对象调用,子类中有的名字 一定用子类的,子类中没有的找父类,如果父类也没有报错
若果想调用父类的,需要单独调用,需要自己穿self参数
如果在子类使用使用 super()._init_(父类的参数)代表使用父类,父类参数没有self,只能在Python3中
3、多继承
#了解一下继承顺序 class a: def func(self):print('a') class b(a): def func(self):print('b') #pass class c(a): def func(self):print('c') #pass class d(b,c): pass print(a.mro())#查看继承顺序
新式类 继承object类的才是新式类,广度优先 Python3中
经典类 若果直接创建一个类在2.7中就经典类,深度优先
多继承中,我们的子类的对象调用一个方法,默认就近原则
python2.7 新式类和经典类共存,新式类要继承object
python3 只有新式类,默认继承object