📜  Python继承(1)

📅  最后修改于: 2023-12-03 15:19:35.859000             🧑  作者: Mango

Python继承

在面向对象编程中,继承是一种重要的概念,它允许一个类(称为子类或派生类)从另一个类(称为父类或基类)继承属性和方法。通过继承,子类可以重用父类的代码,并可以添加或修改自己的属性和方法。

基本语法
class ParentClass:
    # 父类代码
    
class ChildClass(ParentClass):
    # 子类代码

子类通过将父类作为参数传递给类声明来实现继承。子类可以访问父类的所有非私有属性和方法。当子类的实例调用一个方法时,如果该方法在子类中不存在,则会在父类中查找。

单继承

Python支持单继承,即一个子类只能继承一个父类。这种继承结构可以形成一个简单的父子关系。

class Animal:
    def __init__(self, name):
        self.name = name
    
    def move(self):
        print(f"{self.name} is moving")

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)
        self.breed = breed
    
    def bark(self):
        print(f"{self.name} is barking")

dog = Dog("Fido", "Labrador")
dog.move()  # Output: Fido is moving
dog.bark()  # Output: Fido is barking

在上面的例子中,AnimalDog 的父类,Dog 继承了 Animal 的属性和方法。

多继承

Python还支持多继承,即一个子类可以继承多个父类。这种继承结构非常灵活,但也需要注意避免产生复杂的继承关系。

class Flyable:
    def fly(self):
        print("Flying")

class Swimmable:
    def swim(self):
        print("Swimming")

class Duck(Flyable, Swimmable):
    pass

duck = Duck()
duck.fly()   # Output: Flying
duck.swim()  # Output: Swimming

在上面的例子中,Duck 类同时继承了 FlyableSwimmable 两个父类的方法。

方法重写

子类可以重写父类的方法,即在子类中对父类中已定义的方法重新实现。

class Shape:
    def area(self):
        print("Calculating area")

class Circle(Shape):
    def area(self):
        print("Calculating area of circle")

class Square(Shape):
    def area(self):
        print("Calculating area of square")

circle = Circle()
circle.area()  # Output: Calculating area of circle

square = Square()
square.area()  # Output: Calculating area of square

在上面的例子中,CircleSquare 类分别重写了 Shape 类中的 area() 方法,以便根据具体图形计算面积。

super() 函数

在子类中,可以使用 super() 函数调用父类的方法。这在子类中需要做一些额外工作,又需要保留父类行为的情况下非常有用。

class Parent:
    def __init__(self, value):
        self.value = value

    def display(self):
        print("Parent:", self.value)

class Child(Parent):
    def __init__(self, value):
        super().__init__(value)

    def display(self):
        super().display()
        print("Child:", self.value)

child = Child(10)
child.display()

上面的例子中,Parent 类有一个 display() 方法,Child 子类调用 super().display() 来调用父类的 display() 方法,并在其后自定义了子类的行为。

总结

通过继承,我们可以构建更强大和有组织的程序。通过重用代码和方法的能力,我们可以提高开发效率,同时更易于维护代码。而在 Python 中,继承是一种灵活且强大的特性,可以帮助我们构建更有表现力的对象模型。