Python中的类的继承

2023-12-17 12:33:21

??? 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()

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

文章来源:https://blog.csdn.net/2301_80002696/article/details/135042327
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。