首页 > 代码库 > python 学习笔记-构造方法
python 学习笔记-构造方法
Python中的构造函数是形如 def __init__(self),例如
class Bird: def __init__(self): self.hungry=True def eat(self): if self.hungry: print‘Ahhhh‘ self.hungry=False else: print ‘no,thx‘ 实例化类Bird对象b: b=Bird() b.eat() b.eat() Ahhhh no,thx
假设现在Bird有一个子类Songbird(),继承了Bird()的方法和属性,
class Songbird(Bird): def __init__(self): self.sound=‘ohlaohaloha‘ def sing(self): print self.sound sb=Songbird() sb.eat() sb.eat()
调用后我们看到系统报错,因为Songbird的构造方法并没有任何关于hungry的代码。
AttributeError: Songbird instance has no attribute ‘hungry‘
尝试在子类Songbird的构造方法中增加超类中的方法eat(),也得到相同错误,因为eat()方法含有hungry变量。
那么如何在子类中调用超类的构造方法来初始化,使子类实例具有超类实例呢?提供两种方法:
1. 调用未绑定的超类构造方法:
class Songbird(Bird): def __init__(self): Bird.__init__(self) self.sound=‘ohlaohaloha‘ def sing(self): print self.sound
在子类中增加一行 Bird.__init__(self) , 那么子类的实例化对象就可以使用超类的构造方法的所有实现。
sb=Songbird() sb.eat() sb.eat() Ahhhh no,thx
2. 使用super方法来调用超类中的方法,这里指的是__init__构造方法。
class Songbird(Bird): def __init__(self): super(Songbird,self).__init__() self.sound=‘ohlaohaloha‘ def sing(self): print self.sound
这样使用前必须加上
from _pyio import __metaclass__ __metaclass__=type
python 学习笔记-构造方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。