Python中的类的继承

    Python的继承机制,可以轻松实现类的复用。Python可以是单根继承或多重继承两种。继承机制经常用于在不影响现有类的基础上,创建与现有类功能类似的新类,对现有类进行功能扩展;或是现有类的属性不够描述新的需求,需要在现有类基础上添加一些新属性和方法。

需要指出的是,Python中,子类继承父类的一般语法结构如下:

class 子类名(父类名):

构造函数

……

定义类属性

……

定义类函数

……

      继承是面向对象的重要性质之一,它主要用于描述类与类之间的关系,在不改变原有类的基础上扩展原有类的功能。若类与类之间具有继承关系,被继承的类称为父类或基类,继承其他类的类称为子类或派生类,子类会自动拥有父类的公有成员。

    若在定义类时不指明该类的父类,那么该类默认继承基类object。

如果需要在派生类中调用基类的方法,可以使用内置函数super()或者通过“基类名.方法名()”的方式来实现这一目的。

class Father:
    def get_money(self):
        print("负责赚钱")
    def driving(self):
        print("会驾驶")
    def math(self):
        print("会学习数学")

class Son(Father):
    def python(self):
        print("会学python")
        Father.get_money(self)
        super().math()
        
son = Son()
son.python()

     定义一个猫类Cat和一个继承Cat类的折耳猫类ScottishFold,代码如下:

class Cat(object):
    def __init__(self,color):
        self.color=color
    def walk(self):
        print("走猫步~")
#定义继承Cat类的ScottishFold类
class ScottishFold(Cat):
    pass
fold=ScottishFold("灰色")
print(fold.color+"的折耳猫")
fold.walk()

    (1) 在使用单根继承的时候,父类中的函数、属性都可以被子类继承;反过来,子类中的属性、函  数却无法被父类使用。

    (2) 若想使用父类中的成员,在使用super()函数,表达完父类之后,需要加入“.”运算符。即:  “super().”。

    (3) 父类的逻辑范围比子类的逻辑范围要广大。

    (4) 父类中包含全部子类抽象出来的共同点。子类与子类之间,有互不相同的特点。

    (5) 父类与所有的子类中,可以包含相同命名的方法。这些方法的运算逻辑是可以不一样的。子类  从父类继承得来的类方法中,是可以给子类直接使用的,但有的时候,需要对类方法进行修改。  针对这种情况,我们就需要在子类中重写父类的方法。如,本节例题中的eat()方法。

 

多继承 

    程序中一个类也可以继承多个类,即子类具有多个父类,也自动拥有所有父类的公有成员。

    Python中多继承的语法格式如下所示:

    class 子类名(父类名1,父类名2,…..):

    例如,定义一个表示房屋的类House、一个表示汽车的类Car和一个继承House和Car的子类TouringCar,代码如下:

class House(object):
    def live(self):
        print("供人居住")
class Car(object):
    def drive(self):
        print("行驶")
class TouringCar(House,Car):
    pass
tour_car=TouringCar()
tour_car.live()
tour_car.drive()

    从以上结果可以看出,子类继承多个父类后自动拥有了多个父类的公有成员。

    试想一下,如果House类和Car类中有一个同名的方法,那么子类会调用哪个父类的同名方法呢?

class House(object):
    def live(self):
        print("供人居住")
    def test(self):
        print("House类测试")
class Car(object):
    def drive(self):
        print("行驶")
    def test(self):
        print("Car类测试")
class TouringCar(House,Car):
    pass
tour_car=TouringCar()
tour_car.live()
tour_car.drive()
tour_car.test()

  如果子类继承的多个父类是平行关系的类,那么子类先继承哪个类,便会调用哪个类的方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清潇沈默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值