python的类的继承

-----------------------------------------------------------------------------------------------------------------------------------------------

面向对象编程 (OOP) 语言的一个主要功能就是“继承”。

派生类/子类  ----------->基类/父类

继承是指这样一种能力:

1、功能扩展:实现类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

2、方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

3、构造函数__init__:a、子类中需要父类的构造方法就需要显示的调用父类的构造方法,或者不重写父类的构造方法

                                     b、子类完全重构父类的构造方法__init__

                                     c、子类部分重构父类的构造函数__init__

-----------------------------------------------------------------------------------------------------------------------------------------------

第一:功能扩展

子类,继承父类全部,并添加其特有的方法

class animal(object):
    def __init__(self,animal,animal_taxonomy):
        self.animal=animal
        self.animal_taxonomy=animal_taxonomy
    def animal_class(self):
        print('earth animal %s'%self.animal)

class dog(animal):
    def dog_class(self,dog_name):
        print('dog name %s'%dog_name)

aktia=dog('diqiu','dongwu')
aktia.animal_class()
aktia.dog_class('wangcai')

打印结果:earth animal diqiu
                  dog name wangcai

第二:方法重写

重写父类方法,注意点:因为完成继承父类的构造函数__init__,所以在重写子类的方法,可以直接self.animal,传入对应的参数【相当于省略了一部分代码,即子省略的__init__构造函数的代码】


class animals(object):
    def __init__(self,animal,animal_taxonomy):
        self.animal=animal
        self.animal_taxonomy=animal_taxonomy
    def animal_class(self):
        print('earth animal %s'%self.animal)

class cat(animals):
    def animal_class(self,country):
        print('earth animal %s county %s'%(self.animal,country))#直接传入self.animal

xiaohuang=cat('diqiu','dongwu')
xiaohuang.animal_class('china')

第三:构造函数__init__

1、不重写父类的构造方法,就是子类的构造函数__init__完全和父类一致【因为一致,所以没有写,代码简洁】

eg:第一/第二条目录

 

2、完成重构父类的构造函数__init__【即子类重写构造函数,且没有显示调用父类的构造函数】

      【这样我们甚至可以直接新定义一个类,而非继承】

class animals(object):
    def __init__(self,animal,animal_taxonomy):
        self.animal=animal
        self.animal_taxonomy=animal_taxonomy
    def animal_class(self):
        print('earth animal %s'%self.animal)

class insect(animals):
    def __init__(self,star,purpose):
        self.star=star
        self.purpose=purpose
        print(self.star)
    def insect_class(self):
        print('star animal %s'%self.star)

注意:完全重构__init__构造函数。父类中的__init__不会调用,即不会传入对应的参数,导致,我们即使调用父类方法【没有重写】,如果该父类方法引用父类__init__中的参数,那么报错。

 

3、部分重构父类的构造函数__init__【在子类中显示调用父类,子类和父类的属性都会被初始化】

   目的:

  •   初始化时添加部分参数;
  •   如果显示调用父类的__init__传入的参数,少于父类中的原始参数,那么只初始化了传入的参数。当然如果父类的__init__调用类变量,则不受影响。

显示调用父类构造函数方法有二:

  •         1.经典类的写法: 父类名称.__init__(self,参数1,参数2,...)
  •         2. 新式类的写法:super(子类,self).__init__(参数1,参数2,....)
class animals(object):
    def __init__(self,animal,animal_taxonomy):
        self.animal=animal
        self.animal_taxonomy=animal_taxonomy
    def animal_class(self):
        print('earth animal %s'%self.animal)

class whale(animals):
    def __init__(self,animal,animal_taxonomy,weight):
        self.weight=weight
        #super(whale,self).__init__(animal,animal_taxonomy)
        animals.__init__(self,animal,animal_taxonomy)
    def animal_weight(self):
        print('animal wight %s'%self.weight)
        
ww=whale('diqiu','dongwu','very big')
ww.animal_weight()
ww.animal_class()

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值