📜  Python中的继承(1)

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

Python中的继承

继承是面向对象编程中的一个重要概念,它允许子类继承父类的属性和方法,同时还可以添加自己的属性和方法。

基本语法

Python中的继承语法相当简单,只需在子类的类定义中加入父类即可。例如:

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

    def whoami(self):
        print("I am", self.name)

class Child(Parent):
    pass

在这个例子中,我们定义了一个父类Parent和一个子类Child。子类的类定义加入了父类Parent,这就使得Child成为了Parent的子类,从而可以继承Parent类中的属性和方法。其中,子类通过pass表示自己没有新的属性和方法需要添加,因此直接继承父类即可。现在,我们可以创建一个Child对象,并调用Parent中的方法:

>>> a = Child("Alice")
>>> a.whoami()
I am Alice
子类方法调用父类方法

子类可以通过调用父类的方法来实现一些自定义操作。例如,在上述例子中,我们可以在Child中定义自己的whoami()方法,并在其中调用父类的同名方法:

class Child(Parent):
    def whoami(self):
        print("I am the child of", self.name)
        super().whoami()

在这个例子中,我们定义了一个新的whoami()方法,其中调用了父类的同名方法。通过super()函数,我们可以直接调用父类的方法。super()函数返回的是一个特殊的对象,我们可以在其中调用父类方法,并将当前对象传入作为参数。

现在,我们可以再次调用whoami()方法来测试一下:

>>> a = Child("Alice")
>>> a.whoami()
I am the child of Alice
I am Alice

可以看到,Child中定义的方法覆盖了Parent中的同名方法,但通过调用父类方法,我们还是可以输出父类中的信息。

方法重写(Method Overriding)

子类可以覆盖(或重写)父类的方法,从而实现自己的行为。在子类中,如果定义了父类中已经存在的方法,那么就会使用子类中的方法进行覆盖。

例如,在上述例子中,我们可以在Child中重写whoami()方法:

class Child(Parent):
    def whoami(self):
        print("I am the child of", self.name)

现在,再次调用whoami()方法,我们就可以看到Child中定义的新信息:

>>> a = Child("Alice")
>>> a.whoami()
I am the child of Alice
super()函数的作用

前面我们提到了super()函数,它用来调用父类的方法。不过,super()函数具体作用是什么呢?

在Python中,我们可以通过super()函数来访问父类的属性和方法。super()函数实际上是一个特殊的对象,它包括了当前类和父类之间的关系,从而可以实现对父类的调用。

super()函数的结构如下:

class B(A):
    def method(self, arg):
        super().method(arg)

在这里,我们定义了一个B类,它继承了A类。在B类中,我们定义了一个method()方法。在这个方法中,我们调用了父类A中的同名方法。通过super()函数,我们可以直接调用父类方法,并将当前对象传入作为参数。

总结

Python中的继承是一个非常强大的特性。通过继承,我们可以编写出更加简洁、灵活和可扩展的代码。同时,我们还可以重写方法、添加新的属性和方法等等。这些操作都可以让我们更好地实现自己的需求。