python--继承

1. 继承介绍

在面向对象编程中,继承是面向对象三大特征之一。继承允许我们定义一个类,这个类继承了另一个类的属性和方法,从而减少了代码的重复,同时也遵循了软件开发的DRY(Don't Repeat Yourself)原则,使代码更具可读性、可维护性和扩展性。

Python中的继承机制非常灵活,它支持多继承、方法重写和超继承调用。

2. 单继承

2.1 简单的继承示例

在Python中,可以通过继承父类来创建子类,并重载父类的方法或者添加新的方法,下面我们来看一个简单的示例:

class Person:

def __init__(self, name, age):

self.name = name

self.age = age

def introduce(self):

print('My name is {}, and I am {} years old.'.format(self.name, self.age))

class Student(Person):

def __init__(self, name, age, school):

super().__init__(name, age)

self.school = school

def study(self):

print('{} is studying in {}.'.format(self.name, self.school))

这里我们创建了一个Person类,包含了姓名和年龄两个属性以及一个introduce()方法,用于输出姓名和年龄信息。然后我们又创建了一个Student类,它从Person类继承了姓名和年龄两个属性以及introduce()方法,并添加了一个新的方法study(),用于输出学生学校的信息。

现在我们可以用Student类创建一个学生对象,并调用它的方法:

student = Student('Tom', 18, 'MIT')

student.introduce()

student.study()

输出结果如下:

My name is Tom, and I am 18 years old.

Tom is studying in MIT.

这个简单的示例展示了继承的基本思想,即从父类继承属性和方法,并在子类中添加新的属性和方法来实现功能的扩展。

2.2 方法重写

当子类需要对继承自父类的方法进行修改时,需要重写这个方法,下面我们来看一个方法重写的示例:

class Rectangle:

def __init__(self, width, height):

self.width = width

self.height = height

def area(self):

return self.width * self.height

class Square(Rectangle):

def __init__(self, side):

super().__init__(side, side)

def area(self): # 重写area方法

return self.width ** 2

r = Rectangle(5, 6)

print(r.area())

s = Square(5)

print(s.area())

这里我们创建了一个Rectangle类,包含width和height两个属性以及area()方法,用于计算矩形的面积。然后我们又创建了一个Square类,它从Rectangle类继承了width和height两个属性以及area()方法,并重写了area()方法,用于计算正方形的面积。

现在我们可以用Rectangle类创建一个矩形对象,用Square类创建一个正方形对象,并分别调用它们的area()方法:

r = Rectangle(5, 6)

print(r.area()) # 30

s = Square(5)

print(s.area()) # 25

输出结果如下:

30

25

可以看到,Square类重写了Rectangle类的area()方法,并使用自己的算法实现了正方形的面积计算。

3. 多继承

在Python中,一个子类可以从多个父类继承属性和方法,这种继承方式称为多继承。下面我们来看一个多继承的示例:

class A:

def do_something(self):

print('do something in A')

class B:

def do_something(self):

print('do something in B')

class C(A, B):

def test(self):

self.do_something()

c = C()

c.test()

这里我们创建了三个类A、B、C,其中A和B是两个父类,C是一个子类,它从A和B两个父类继承了do_something()方法并重写实现了test()方法,用于在test()方法中调用do_something()方法。

现在我们可以创建一个C类的对象,并调用它的test()方法:

c = C()

c.test()

输出结果如下:

do something in A

可以看到,C类的do_something()方法的实现来自于A类而不是B类,这是由于在多继承中,按照“广度优先”的顺序搜索方法,即从左到右遍历所有父类,如果有同名方法,就使用最左边的那个父类的方法。

4. 超继承调用

当子类需要调用父类的方法时,可以使用超继承调用的方法,它使用super()函数来实现。下面我们来看一个超继承调用的示例:

class A:

def do_something(self):

print('do something in A')

class B:

def do_something(self):

print('do something in B')

class C(A, B):

def do_something(self):

super().do_something()

print('do something in C')

c = C()

c.do_something()

这里我们创建了三个类A、B、C,其中A和B是两个父类,C是一个子类,它从A和B两个父类继承了do_something()方法并重写实现了它,用于在C类中调用父类的do_something()方法并追加新的功能。

现在我们可以创建一个C类的对象,并调用它的do_something()方法:

c = C()

c.do_something()

输出结果如下:

do something in A

do something in C

可以看到,当C类的do_something()方法被调用时,它先使用super()函数调用了A类的do_something()方法,然后再输出自己的信息。

5. 总结

本文介绍了Python中的继承机制,并分别讲解了单继承、多继承、方法重写以及超继承调用的使用方法,同时也展示了继承的灵活性和优点,希望读者通过本文的学习,能够更好地理解和应用Python中的继承技术。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签