类的继承和定制

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

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

继承的基础语法:

python 不同py文件的类继承 python类的继承和定制_父类

  • 在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)  
>手可以用来干活
>湖北属于中国,面积很大
>黑色

python 不同py文件的类继承 python类的继承和定制_类的继承_02



类的继承之多层继承
  • 继承不仅可以发生在两个层级之间(即父类-子类),还可以有父类的父类、父类的父类的父类……
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  ) 
>手可以用来干活
>湖北属于中国,面积很大
>黑色

对比一下这两种有趣的继承方法:

python 不同py文件的类继承 python类的继承和定制_python3学习_03



类的定制
  • 子类可以在继承的基础上进行个性化的定制,包括:(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()
>雷猴!欢迎来到广东。