python3学习课(十三)-类的继承和定制

类的继承和定制

继承的基础语法
类的继承之多层继承
类的继承之多重继承
类的定制

——————————————————————————————

继承的基础语法:
在这里插入图片描述
  • 在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()
>雷猴!欢迎来到广东。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值