Python学习13之类(2)继承
引入:我们对某一个类定义了一些属性和方法后,如果想添加新的属性或方法,有两种方法,第一种就是对类直接进行改造,但是有些自定义类已经被软件项目所使用,不允许直接修改类原始代码。或者有些第三方提供的类没有提供原始代码(类模块被编译了),于是就有了第二种新的方法-à继承。
定义:在继承原有类功能的基础上,增加新的功能(属性或者方法),形成新的子类,被继承的叫父类。
子类可以使用父类定义的内容或者行为等
继承的实现:
--父类,基类,超类:能继承的类
--子类:有继承行为的类
所有类都必须有一个父类,如果没有,默认为是object的子类
子类可以有多个父类
继承的格式:class 子类名(父类名)
class Person():
name="Wang"
age=0
class Teacher(Person):
pass
t=Teacher()
print(t.name)
issubclass如何检测是否是子类
可以用来检测两个类的父子关系
Issubclass(A,B):A是否是B的子类
构造函数的继承:构造函数默认继承
class Person():
def __init__(self,name,age):
print("Person=({},{})".format(name,age))
class Teacher(Person):
pass
t=Teacher('wsx',22)
继承有以下几个注意点:子类可以继承多个父类。
一个父类可以有多个子类。
每个子类必须有一个父类。
继承可以多层级继承,如Box1是父类,Box2是Box1的子类,Box3是Box2的子类……
#父类
class Box1():
'''
求立方体的类
'''
def __init__(self,length1,width1,height1):
self.length=length1
self.width=width1
self.height=height1
def volume(self):
return self.length*self.width*self.height
#子类--Box2
class Box2(Box1):
def __init__(self,length1,width1,height1): #子类重新定义__init__函数(需要照抄父类init函数的参数)
super().__init__(length1,width1,height1) #super实现父类和子类的关联
self.color='white'
self.material='paper'
self.type='fish'
def area(self):
res=self.height*self.width+self.height*self.length+self.width*self.length
return res*2
#子类实例化
my_box2=Box2(10,20,30)
print(my_box2.volume())
print(my_box2.area())
重写方法
当父类的方法满足不了实际需求的时候,可以在子类中重写方法。
#父类
class Box1():
'''
求立方体的类
'''
def __init__(self,length1,width1,height1):
self.length=length1
self.width=width1
self.height=height1
def volume(self):
return self.length*self.width*self.height
#子类--Box2
class Box2(Box1):
def __init__(self,length1,width1,height1): #子类重新定义__init__函数(需要照抄父类init函数的参数)
super().__init__(length1,width1,height1) #super实现父类和子类的关联
self.color='white'
self.material='paper'
self.type='fish'
def area(self):
res=self.height*self.width+self.height*self.length+self.width*self.length
return res*2
def volume(self,num): #重写volume方法
return self.length*self.width*self.height*num
#子类实例化
my_box2=Box2(10,20,30)
print("5个立方体的体积是"+str(my_box2.volume(5)))