当我们创建一个新类时,如果这个新类与我们之前定义过的某个类非常相似,我们可以使用继承来避免重复编写相同的代码,从而实现代码重用的目的。
什么是继承?
继承是指一个类可以继承另一个类的特征和行为,被继承的类被称为父类(或基类、超类),继承这些类的类被称为子类(或派生类)。
子类可以访问父类中定义的属性和方法,并且可以在自己的类中添加新的属性和方法。
继承的语法如下:
class ParentClass:
# 父类的属性和方法
pass
class ChildClass(ParentClass):
# 子类的属性和方法
pass
子类中的 pass 关键字表示没有定义任何新方法或属性。
父类和子类的调用顺序
在继承中,如果子类和父类拥有同名的方法或属性,子类会覆盖父类的方法或属性。在这种情况下,如果我们想要调用父类中的方法或属性,我们可以使用 super() 函数。
例如:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age)
self.grade = grade
在上面的示例中,Student 类继承自 Person 类,并重写了 Person 类的构造函数。在 Student 类的构造函数中,使用了 super() 函数调用了父类的构造函数,从而保证了父类中的属性也可以被正确地初始化。
示例一:汽车
我们来举个实际的例子,汽车中的各种车型都有相同的属性和方法,如轮胎数、速度等,但又有不同的属性和方法,比如电动车有电池和充电方法,而普通汽车没有。
class Car:
def __init__(self, brand, color, speed, tires):
self.brand = brand
self.color = color
self.speed = speed
self.tires = tires
def accelerate(self):
print("加速中...")
def brake(self):
print("刹车中...")
class ElectricCar(Car):
def __init__(self, brand, color, speed, tires, battery):
super().__init__(brand, color, speed, tires)
self.battery = battery
def recharge(self):
print("充电中...")
上述代码中我们定义了一个 Car 父类,有品牌、颜色、速度、车轮数量等属性和加速、刹车的方法。
接着我们定义了一个 ElectricCar 子类,继承自 Car 父类,但在此基础上多了一个属性 battery 和充电方法 recharge。
示例二:形状
我们来看一个更加简单的示例,这里定义了一个 Shape 父类,包含求面积和求周长的方法,然后定义了一个 Rectangle 子类和一个 Circle 子类,分别表示矩形和圆形,继承自 Shape 父类,并且自己实现了求面积和求周长的方法。
class Shape:
def area(self):
pass
def perimeter(self):
pass
class Rectangle(Shape):
def __init__(self, length, width):
self.length = length
self.width = width
def area(self):
return self.length * self.width
def perimeter(self):
return 2 * (self.length + self.width)
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
return 3.14 * self.radius ** 2
def perimeter(self):
return 2 * 3.14 * self.radius
上述代码中我们定义了一个 Shape 父类,包含了求面积和求周长的方法。
接着我们定义了一个 Rectangle 子类,继承自 Shape 父类,重写了 Shape 父类中的 area() 和 perimeter() 方法,实现了求矩形面积和周长的方法。
同时我们定义了一个 Circle 子类,同样继承自 Shape 父类,重写了 Shape 父类中的 area() 和 perimeter() 方法,实现了求圆形面积和周长的方法。
这样在我们需要使用这些形状的时候,就可以非常方便地继承 Shape 父类,避免重复编写求面积和周长的代码。
综上,以上便是关于Python中面向对象中继承的详细讲解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python中关于面向对象中继承的详细讲解 - Python技术站