python中子类调用父类方法几点细节(正确使用super)
来源:互联网 发布:linux codeblocks使用 编辑:程序博客网 时间:2024/06/18 12:43
近期在写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 python23class persion():4 def __init__(self, name, age):5 self.name = name6 self.age = age7 def talk(self):8 print "i am a persion. name: %s, age: %s" %(self.name, self.age)910class 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 = school17 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: 2i am a student. name: lin, age: 3, school: MIddleSchool
0 0
- python中子类调用父类方法几点细节(正确使用super)
- Python中新式类,子类使用super方法显式调用父类的__init__方法
- python子类调用父类的方法-super
- 一个子类要调用父类的方法时,默认是使用this还是super?
- Python中子类怎样调用父类方法
- python中子类调用父类构造方法
- Python中子类怎样调用父类方法
- python中子类实例化调用父类方法
- python中子类调用父类的初始化方法
- python中子类调用父类的初始化方法
- python中通过super()调用父类构造方法
- Python 子类调用父类方法
- Python 子类调用父类方法
- python子类调用父类的方法
- Python 子类调用父类的方法
- python子类调用父类的方法
- python子类调用父类的方法
- python子类调用父类的方法
- Merge k Sorted Lists
- oracle生成随机数
- Fiddler 教程
- maven项目低模块如何引用高模块的方法
- 深入理解Android博客
- python中子类调用父类方法几点细节(正确使用super)
- eclipse插件安装方法
- How do servlets work? Instantiation, session variables and multithreading
- 如何使用 Barracuda 防火墙设置/保护 Azure 应用程序
- android系统文件夹全解
- 进一步探索:Windows Azure 网站中解锁的配置选项
- Oracle10g Logical DataGuard 详细搭建过程
- 10048 - Audiophobia
- 胖子伤不起