4. python 子类调用父类方法
来源:互联网 发布:千峰php培训多少钱 编辑:程序博客网 时间:2024/06/10 15:14
- 方法一调用未绑定的父类的构造方法
- 方法二使用 super 函数
假设存在 Person 与 Student 两个类:
class Person(object): def __init__(self): self.name = "Tom" def getName(self): return self.nameclass Student(Person): def __init__(self): self.age = 12 def getAge(self): return self.ageif __name__ == "__main__": stu = Student() print stu.getName()
运行以上代码会报以下错误
Traceback (most recent call last): File "test.py", line 18, in <module> print stu.getName() File "test.py", line 6, in getName return self.nameAttributeError: Student instance has no attribute 'name'
报错原因:其他语言(java、php)有所不同,尽管 Student 类继承了 Person 类,但是并没有调用父类的 __init__()
方法,所以在此时子类是不可调用父类的方法的。
方法一:调用未绑定的父类的构造方法
class Person(object): def __init__(self): self.name = "Tom" def getName(self): return self.nameclass Student(Person): def __init__(self): Person.__init__(self) self.age = 12 def getAge(self): return self.ageif __name__ == "__main__": stu = Student() print stu.getName()
在调用一个实例的方法时,该方法的 self 参数会被自动绑定到实例上(称为绑定方法)。但如果直接调用父类的方法(比如 Person.__init__()
),那么就没有实例会被绑定,这样就可以自由的提供需要的 self 参数,这种方法就称为未绑定方法。
通过将当前的实例作为 self
参数提供给未绑定方法, Student
类就能使用父类构造方法的所有实现,从而 name
变量被设置。
方法二:使用 super 函数
class Person(object): def __init__(self): self.name = "Tom" def getName(self): return self.nameclass Student(Person): def __init__(self): super(Student, self).__init__() self.age = 12 def getAge(self): return self.ageif __name__ == "__main__": stu = Student() print stu.getName()
super函数会返回一个super对象,这个对象负责进行方法解析,解析过程其会自动查找所有的父类以及父类的父类。
super函数比在子类中直接调用未绑定方法更直观,但是其最大的优点是如果子类继承了多个父类,它只需要使用一次super函数就可以。
阅读全文
0 0
- 4. python 子类调用父类方法
- Python 子类调用父类方法
- Python 子类调用父类方法
- python子类调用父类的方法
- Python 子类调用父类的方法
- python子类调用父类的方法
- python子类调用父类的方法
- python子类调用父类的方法
- python子类调用父类的方法
- Python 父类调用子类方法
- Python中子类怎样调用父类方法
- Python学习笔记--子类调用父类方法
- python中子类调用父类构造方法
- Python中子类怎样调用父类方法
- python中子类实例化调用父类方法
- python子类调用父类的方法-super
- python学习笔记:子类怎样调用父类方法
- python子类如何调用父类的__init__方法
- SVM问题小结
- [AS尝龟]导入RecyclerView后错误解决方法:Error:Execution failed for task ':app:processDebugManifest'. > Manifest
- MySQL字符函数
- (python)斐波那契数列
- JS 关于(function(w) {...})(window)写法的理解——立即执行函数
- 4. python 子类调用父类方法
- Spring定时任务开发,实现动态修改时间参数,手动开启关停等
- mongodb修改最大连接数
- TCP/IP四层模型
- 点击验证倒计时
- MYSQL 表连接 ON AND 和ON WHERE 的区别
- 为什么在导进jar包之后要进行add to build path???
- Linux进阶之 locate 命令
- 9 单词排序