您的位置:首页 > 编程语言 > Python开发

python子类调用父类的构造方法实现方案

2017-05-20 20:30 344 查看
python中,类的构造方法是__init__()。当一个类被子类继承且子类重写了构造方法后,若子类还想使用父类的构造方法,如果直接通过创建的子类对象调用父类的方法会报错。解决办法有两个:一个是调用超类方法的未绑定版本,一个是使用super函数
见下面的例子
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: