python 子类调用父类的三种方法,python中子类调用父类方法几点细节(正确使用super)...

本文介绍了Python中子类调用父类方法的三种方式,包括传统的显式调用、使用`super()`的两种形式,并强调了在使用`super()`时父类必须为新式类的要求。通过示例代码展示了这三种方法的等效性,以及在不同场景下的适用性选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近期在写python程序时意外发现了子类调用父类方法的一些细节问. 仔细学习做笔记如下:

子类的方法要显示调用父类的方法,不调用系统不会默认调用(不同于java)

调用方法有3种, 如下面的程序中的标记的 12,13,14 三行(任何一种方法都可以)

a) persion.__init__(self, name, age)

b) super(student, self).__init__(name, age)

c) super().__init__(name, age)

a方法是传统的调用方法, b是改进后的方法. 区别是: 当基类的名字有改变时, a方法子类的中的相应代码也要改. b就不用改了, 所以b方法要好一些. 方便代码的维护. c方法呢, 是python3.x以上版本用的. 我没有测试, 应当是可以的

需要注意的是; 如果使用super调用父类方法, 则父类必须是新式类.

新式类:就是所有类都必须继承的类,如果什么都不想继承,就继承到object类

经典类:没有父类

比如下我下面的代码3行如果没有object字样, 则13行会报错: TypeError: must be type, not classobj

我写的试验程序:

1#!/usr/bin/evn python

2

3class persion():

4 def __init__(self, name, age):

5 self.name = name

6 self.age = age

7 def talk(self):

8 print "i am a persion. name: %s, age: %s" %(self.name, self.age)

9

10class student(persion):

11 def __init__(self, name, age, school):

12 #persion.__init__(self, name, age)

13 super(student, self).__init__(name, age)

14 #super().__init__(name, age)

15 #以上3种方法都可以用. 提供第2行的. 第3行在python3.x版本支持

16 self.school = school

17 def talk(self):

18 print ('i am a student. name: %s, age: %s, school: %s' % (self.name, str(self.age), self.school))

19

20if __name__ == "__main__":

21 aPer = persion("lin", 2)

22 aPer.talk()

23 aStu = student("lin", 3, "MIddleSchool")

24 aStu.talk()

结果:

i am a persion. name: lin, age: 2

i am a student. name: lin, age: 3, school: MIddleSchool

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值