一、继承
继承:就是在继承原有类功能的基础上,增加新的功能(属性和方法),形成新的子类。被继承的叫父类。
1、继承基本格式
class 子类名(父类名)
这里多父类可以一起继承给同一个子类。格式如下:
class 子类名(父类名1,父类名2,父类名3,...)
2、继承方法实例
class Box1():
def __init__(self,l1,w1,h1):
self.length=l1
self.width=w1
self.height=h1
def volume(self):
return self.length*self.width*self.height
class Box2(Box1):
def __init__(self,l1,w1,h1):
super().__init__(l1,w1,h1) #super实现父类和子类的关联
self.color='white'
self.material='paper'
self.type='fish' #增加属性
def area(self):
r=self.length*self.width+self.width*self.height+self.length+self.height
return 2*r
my_box=Box2(10,10,10)
print('立方体体积是%d'%(my_box.volume()))
print('立方体表面积是%d'%(my_box.area()))
print('Box颜色%s,材质%s,类型%s'%(my_box.color,my_box.material,my_box.type))
# 立方体体积是1000
# 立方体表面积是440
# Box颜色white,材质paper,类型fish
1)在子类名声明时,引入父类名
2)重新定义子类的__init__函数,若父类__init__函数有参数,则照抄父类函数的参数。
3)在子类__init__函数里提供super函数,实现父类与子类的关联,若父类有参数,需要同步参数(self除外)
4)可以在子类中增加新属性定义
5)可以在子类中增加新方法定义
继承可以多层级继承,如Box1为父类,Box2为Box1的子类,Box3为Box2的子类…
二、重写方法
当发现父类的方法满足不了实际需要时,可以在子类中重写方法。
如下:在子类中重写了volume()方法
class Box1():
def __init__(self,l1,w1,h1):
self.length=l1
self.width=w1
self.height=h1
def volume(self):
return self.length*self.width*self.height
class Box2(Box1):
def __init__(self,l1,w1,h1):
super().__init__(l1,w1,h1) #super实现父类和子类的关联
self.color='white'
self.material='paper'
self.type='fish' #增加属性
def area(self):
r=self.length*self.width+self.width*self.height+self.length+self.height
return 2*r
def volume(self,num=1):
return self.length*self.width*self.height*num
my_box=Box2(10,10,10)
print('立方体体积是%d'%(my_box.volume()))
print('立方体表面积是%d'%(my_box.area()))
print('Box颜色%s,材质%s,类型%s'%(my_box.color,my_box.material,my_box.type))
print("5个立方体的体积为%d"%(my_box.volume(5)))
# 立方体体积是1000
# 立方体表面积是440
# Box颜色white,材质paper,类型fish
# 5个立方体的体积为5000
三、私有
有些人希望设计的类内有些变量或函数只允许这个类自身访问。如__init__函数,本身用于类的初始化调用,没有被实例调用的必要。
为了让类定义的变量或函数变成私有的,只要在它的名字前加上双下划线即可__
class Tprivate():
def __init__(self):
self.__say='yes' #在实例中,__say属性实例将无法看到
def p(self):
print(self.__say)
def __p1(self):
print(self.__say) #在实例中,__p1()方法将无法看到
s=Tprivate()
s.p()