python子类调用父类的构造方法实现方案
2017-05-20 20:30
344 查看
python中,类的构造方法是__init__()。当一个类被子类继承且子类重写了构造方法后,若子类还想使用父类的构造方法,如果直接通过创建的子类对象调用父类的方法会报错。解决办法有两个:一个是调用超类方法的未绑定版本,一个是使用super函数
见下面的例子
>>>b = Bird()
>>> b.eat()
Aaaah
>>> b.eat()
No thanks
给鸟这个类(class Bird)创建子类,会唱歌的鸟类
>>> sb = SongBird()
>>>sb.sing()
Squawk
也许一般大家都会想到,既然SongBird是Bird的一个子类,那么SongBird应该也就继承了Bird的方法eat,事实上上述代码做不到这个功能。
下面调用会报错
>>>sb.eat()
改进方法之一:使用未绑定的超类的构造方法
然后再来使用就没用问题了
>>> sb = SongBird()
>>>sb.sing()
Squawk
>>> sb.eat()
Aaaah
>>> sb.eat()
No thanks
方法二:
>>>sb.sing()
Squawk
>>> sb.eat()
Aaaah
>>> sb.eat()
No thanks
见下面的例子
class Bird(object): def __init__(self): self.hungry = True def eat(self) : if self.hungry: print("Aaaah") self.hungry = False else: print("No thanks.")
>>>b = Bird()
>>> b.eat()
Aaaah
>>> b.eat()
No thanks
给鸟这个类(class Bird)创建子类,会唱歌的鸟类
class SongBird (Bird): def __init__(self): self.sound = "Squawk" def sing(self): print(self.sound)
>>> sb = SongBird()
>>>sb.sing()
Squawk
也许一般大家都会想到,既然SongBird是Bird的一个子类,那么SongBird应该也就继承了Bird的方法eat,事实上上述代码做不到这个功能。
下面调用会报错
>>>sb.eat()
改进方法之一:使用未绑定的超类的构造方法
class SongBird (Bird): def __init__(self): Bird.__init__(self)#使用未绑定的超类的构造函数 self.sound = "Squawk": def sing(self): print(self.sound)
然后再来使用就没用问题了
>>> sb = SongBird()
>>>sb.sing()
Squawk
>>> sb.eat()
Aaaah
>>> sb.eat()
No thanks
方法二:
class SongBird (Bird): def __init__(self): super(SongBird,self).__init__(self)#使用super函数,格式:super(父类,self).__init__(self) self.sound = "Squawk" def sing(self): print(self.sound)
>>>sb.sing()
Squawk
>>> sb.eat()
Aaaah
>>> sb.eat()
No thanks
相关文章推荐
- Python实现子类调用父类的方法
- Python开发基础-Day20继承实现原理、子类调用父类的方法、封装
- Python实现子类调用父类的方法
- python基础之继承实现原理、子类调用父类的方法、封装
- Python实现子类调用父类的方法
- python子类调用父类的方法
- Python中子类怎样调用父类方法
- c++ 子类调用父类构造方法 调用父类方法 类声明与实现分离
- Python 在子类中调用父类方法详解(单继承、多层继承、多重继承)
- python子类如何调用父类的__init__方法
- Python 子类调用父类方法
- 子类中方法与父类中形成重写关系,可以在构造方法中用super来调用父类中的该方法
- JS实现子类调用父类的同名函数函数
- 父类中调用子类构造函数实例化子类的实现
- C#中子类调用父类的实现方法
- Python中子类怎样调用父类方法
- Python 子类调用父类方法
- C#中子类调用父类的实现方法