📅  最后修改于: 2023-12-03 15:19:31.236000             🧑  作者: Mango
继承是面向对象编程中的一个重要概念,它允许子类继承父类的属性和方法,同时还可以添加自己的属性和方法。
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中的同名方法,但通过调用父类方法,我们还是可以输出父类中的信息。
子类可以覆盖(或重写)父类的方法,从而实现自己的行为。在子类中,如果定义了父类中已经存在的方法,那么就会使用子类中的方法进行覆盖。
例如,在上述例子中,我们可以在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()
函数具体作用是什么呢?
在Python中,我们可以通过super()
函数来访问父类的属性和方法。super()
函数实际上是一个特殊的对象,它包括了当前类和父类之间的关系,从而可以实现对父类的调用。
super()
函数的结构如下:
class B(A):
def method(self, arg):
super().method(arg)
在这里,我们定义了一个B类,它继承了A类。在B类中,我们定义了一个method()
方法。在这个方法中,我们调用了父类A中的同名方法。通过super()
函数,我们可以直接调用父类方法,并将当前对象传入作为参数。
Python中的继承是一个非常强大的特性。通过继承,我们可以编写出更加简洁、灵活和可扩展的代码。同时,我们还可以重写方法、添加新的属性和方法等等。这些操作都可以让我们更好地实现自己的需求。