清风白茶

我们都会上岸,阳光万里,去哪里都是鲜花开放。
python-supper方法用法-在子类中调用父类方法

python-supper方法用法-在子类中调用父类方法

python-supper方法用法-在子类中调用父类方法

Python中使用super方法实现在子类中调用父类方法

在python中新创建的子类会自动继承父类的所有信息,同时子类中重写某个方法也可以覆盖父类原有的方法。例如:在子类中重新定义__init__方法,那么子类中的__init__方法将会覆盖掉从父类继承的__init__.例如下面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Person():

def __init__(self,name,age):
self.name = name
self.age = age
print("{} is {} years old.".format(self.name,self.age))

class Student(Person):

def __init__(self,name,age,school):
self.name = name
self.age = age
self.school = school
print("{} is {} years old and comes from {} university.".format(name,age,school))

if __name__ == '__main__':
p = Person('DaMing',28)
s = Student('XiaoMing',18,'bbb')

运行结果是这样的,可以看到在Student这个类中__init__已经覆盖了它的父类中的__init__方法。

1
2
DaMing is 28 years old.
XiaoMing is 18 years old and comes from bbb university.

super方法的使用

那如果想要在子类中调用父类中的初始方法应该怎么办呢?可以直接想到的解决方法就是我直接在子类中用父类的名称去调用它的方法不就好了,比如说在Student类中直接写Person.__init__(),这样做的确可行但是如果哪天修改了父类的名称那子类中对应的也需要做相应的修改不便于代码的维护。为了解决这个问题就要用到supper()这个方法了。我们改写一下Student这个类。

1
2
3
4
5
class Student(Person):
def __init__(self,name,age,school):
super().__init__(name,age)
self.school = school
print("{} is {} years old and comes from {}

上面的第3行代码super().__init__(name,age)实际上做了这样几件事情。

  • 通过super()方法获取了父类person的定义。
  • 子类中的__init__调用了Person.__init__()方法。它会自动的将self参数传递给父类,或者也可以指定参数super(cls,inst),cls为类,inst为类实例,然后传入其余参数即可。

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×