类的继承和定制
继承的基础语法
类的继承之多层继承
类的继承之多重继承
类的定制
——————————————————————————————
继承的基础语法:
- 在Python中,我们的习惯表述是:A类是B类的子类,而B类是A类的父类(或超类)。
- 类的继承,让子类拥有了父类拥有的所有属性和方法。
class China():
eyes='黑色'
def hand(self):
print('手可以用来干活')
class Hubei(China) : #hubei()是China()的子类
mouth='吃饭'
def area(self):
print('湖北属于中国,面积很大')
dingshuai= Hubei() #给hubei()创建一个对象
dingshuai.hand() #由于子类拥有了父类拥有的所有属性和方法,所以可以随意调用
dingshuai.area()
print(dingshuai.eyes)
>手可以用来干活
>湖北属于中国,面积很大
>黑色
类的继承之多层继承
- 继承不仅可以发生在两个层级之间(即父类-子类),还可以有父类的父类、父类的父类的父类……
class China():
eyes='黑色'
def hand(self):
print('手可以用来干活')
class Hubei(China) :
mouth='吃饭'
def area(self):
print('湖北属于中国,面积很大')
class Anlu(Hubei): #多层继承
pass
dingshuai= Anlu()
dingshuai.hand()
dingshuai.area()
print(dingshuai.eyes )
>手可以用来干活
>湖北属于中国,面积很大
>黑色
类的继承之多重继承
- 一个类,可以同时继承多个类,语法为class A(B,C,D):。
class China():
eyes='黑色'
def hand(self):
print('手可以用来干活')
class Hubei() :
mouth='吃饭'
def area(self):
print('湖北属于中国,面积很大')
class Anlu(Hubei,China): #多重继承
pass
dingshuai= Anlu()
dingshuai.hand()
dingshuai.area()
print(dingshuai.eyes )
>手可以用来干活
>湖北属于中国,面积很大
>黑色
对比一下这两种有趣的继承方法:
类的定制
- 子类可以在继承的基础上进行个性化的定制,包括:(1)创建新属性、新方法;(2)修改继承到的属性或方法
class Chinese:
eye = 'black'
def eat(self):
print('吃饭,选择用筷子。')
class gd(Chinese): # 类的继承
comefrom = 'guangdong' # 类的定制
def language(self): # 类的定制
print('我们会讲广东话。')
yewen = gd()
print(yewen.eye)
# 父类的属性能用
print(yewen.comefrom)
# 子类的定制属性也能用
yewen.eat()
# 父类的方法能用
yewen.language()
# 子类的定制方法也能用
>black
>guangdong
>吃饭,选择用筷子。
>我们会讲广东话。
- 定制,也可重写代码
#方法一:
class Chinese:
def area(self,a):
print('我们居住的地方,陆地面积是%d万平方公里左右。'% a)
class Cantonese(Chinese):
# 直接对方法进行重写
def area(self,a):
print('我们居住的地方,陆地面积是%d万平方公里左右。'% int(a * 0.0188))
hubei=Cantonese()
hubei.area(960)
>我们居住的地方,陆地面积是18万平方公里左右。
______________________________________________________
#方法二:def语句后接父类.方法(参数)
class Chinese:
def area(self,a):
print('我们居住的地方,陆地面积是%d万平方公里左右。'% a)
class Cantonese(Chinese):
# 间接对方法进行重写
def area(self,a,b=0.0188):
Chinese.area(self,a*b) # 直接继承父类方法,再调整参数。
hubei=Cantonese()
hubei.area(960)
>我们居住的地方,陆地面积是18万平方公里左右。
- 参数的调整,可以增加参数(如 rate),也可以改变参数的默认值,如下:
class Chinese:
def __init__(self, greeting = '你好', place = '中国'):
self.greeting = greeting
self.place = place
def greet(self):
print('%s!欢迎来到%s。' % (self.greeting, self.place))
class Cantonese(Chinese):
def __init__(self, greeting = '雷猴', place = '广东'):
Chinese.__init__(self, greeting, place)
yewen = Cantonese()
yewen.greet()
>雷猴!欢迎来到广东。