Python实现子类调用父类的方法
2017-04-21 10:57
811 查看
如下代码:
运行后会报错:
两种方法解决:
- 第一种
第二种:
PS:让类A继承自object类,这样才能使用super函数,因为这是python的“新式类”支持的特性。当前的class和对象可以作为super函数的参数使用,调用函数返回的对象的任何方法都是调用超类的方法,而不是当前类的方法。
优劣:
- 方法一更直观,方法二可以一次初始化所有超类
- super函数比在超类中直接调用未绑定方法更直观,但是其最大的优点是如果子类继承了多个父类,它只需要使用一次super函数就可以。然而如果没有这个需求,直接使用A.init(self)更直观一些。
class A: def __init__(self): self.namea="aaa" def funca(self): print "function a : %s"%self.namea class B(A): def __init__(self): self.nameb="bbb" def funcb(self): print "function b : %s"%self.nameb b=B() print b.nameb b.funcb() b.funca()
运行后会报错:
bbb function b : bbb Traceback (most recent call last): File "D:workbenchpythonMyPythonProjectteststudyoverwrite_method.py", line 19, in <module> print b.funca() File "D:workbenchpythonMyPythonProjectteststudyoverwrite_method.py", line 6, in funca print "function a : %s"%self.namea AttributeError: B instance has no attribute 'namea'
两种方法解决:
- 第一种
class A: def __init__(self): self.namea="aaa" def funca(self): print "function a : %s"%self.namea class B(A): def __init__(self): #这一行解决了问题 A.__init__(self) self.nameb="bbb" def funcb(self): print "function b : %s"%self.nameb b=B() print b.nameb b.funcb() b.funca()
第二种:
#父类需要继承object对象 class A(object): def __init__(self): self.namea="aaa" def funca(self): print "function a : %s"%self.namea class B(A): def __init__(self): #这一行解决问题 super(B,self).__init__() self.nameb="bbb" def funcb(self): print "function b : %s"%self.nameb b=B() print b.nameb b.funcb() b.funca()
PS:让类A继承自object类,这样才能使用super函数,因为这是python的“新式类”支持的特性。当前的class和对象可以作为super函数的参数使用,调用函数返回的对象的任何方法都是调用超类的方法,而不是当前类的方法。
优劣:
- 方法一更直观,方法二可以一次初始化所有超类
- super函数比在超类中直接调用未绑定方法更直观,但是其最大的优点是如果子类继承了多个父类,它只需要使用一次super函数就可以。然而如果没有这个需求,直接使用A.init(self)更直观一些。
相关文章推荐
- Python实现子类调用父类的方法
- Python开发基础-Day20继承实现原理、子类调用父类的方法、封装
- Python实现子类调用父类的方法
- python基础之继承实现原理、子类调用父类的方法、封装
- Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
- python子类调用父类的方法
- Python学习笔记--子类调用父类方法
- python子类调用父类的方法
- SubClasing用法--子类重写父类方法,父类直接调用实现方式
- 总结python实现父类调用两种方法的不同
- Python 子类调用父类方法
- Python3基础 super层层调用父类的__init__方法 子类的__init__覆盖了父类的__init__的解决方法
- python中子类调用父类构造方法
- Python 子类调用父类的方法
- C#中子类调用父类的实现方法
- python子类调用父类的方法
- Python中子类怎样调用父类方法
- python子类调用父类的方法-super