1 继承
python的继承分为单继承和多继承,新建的类被成为派生类或者子类,而继承的类被成为父类或者超类
查看继承关系
使用__bases__方法查看所有继承对象------》 对象.__bases__
如果没有指定继承父类,则python3中则默认所有的类都继承object类,也叫新式类。
继承与抽象的关系
一定是将对象中的类似的内容抽象出来,在进行继承
软件的重用
如果我们在开发过程中,需要写一个新类,而这个类的功能和已存在的类功能相似,那么就可以通过继承,获得部分的功能,减少代码量
同样的标准库或者第三方库同样可以被继承
派生
新类中也可以有自己的属性和方法,其中属性成为派生属性,方法成为派生方法。但是在定义的时候,要注意尽量别和父类的属性名和方法名重复,因为在调用的时候,如果新类中有,就回优先使用自己的而不去找父类的。
如果新类中的方法需要用到父类中同名的方法,则可以使用类名.方法名()方法名直接调用,也可以使用supper()方法直接调用
# class animal: # def __init__(self,name,aggr,hp): # self.name=name # self.aggr=aggr # self.hp=hp # # def eat(self): # self.hp+=100 # class dog(animal): # def __init__(self,name,aggr,hp,kind): # animal.__init__(self,name,aggr,hp)# 这里的self 是dog的self # self.kind=kind #派生属性 在父类的基础之上又派生了新的属性 # def bite(self,person): #派生方法 在父类的基础上有派生了新的方法 # person.hp-=self.aggr # # def eat(self): # """ # 如果迹象实现新的功能也想使用父类原本的功能,还需要在子类中在掉用父类 # :return: # """ # animal.eat(self)# 这里的self是dog 作为参数传给了animal.eat # self.teeth = 2 # class person(animal): # def __init__(self,name,aggr,hp,sex): # animal.__init__(self,name,aggr,hp) # self.money=0 # self.sex=sex # # def attack(self,dog): # dog.hp-=self.aggr # # def get_weson(self,weson): # pass # # jin=dog('二哈',100,500,'哈士奇') # jin.eat() # print(jin.hp) # dan=person('dandan',20,100,'baobao') # dan.eat() # print(dan.hp) # jin.bite(dan) # print(dan.hp)
super()用法
class animal: def __init__(self,name,aggr,hp): self.name=name self.aggr=aggr self.hp=hp def eat(self): self.hp+=100 print('吃药回血') class dog(animal): def __init__(self,name,aggr,hp,kind): #super(dog,self).__init__(name,aggr,hp) supper内参数可以不传 super().__init__(name, aggr, hp) self.kind=kind def eat(self): print('dog eating') jin=dog('二哈',200,100,'哈士奇') print(jin.name) jin.eat() super(dog,jin).eat() #如果是在类外 使用supper(类名,实例化名).方法() 就会执行类中的方法