python面向對象中的繼承關係中,子類對父類的構造方法的調用有兩種方法:python
父類名.__init__(self,參數) #注意名字是父類 super(本子類名,self)__init__(其餘參數) #注意名字是自己子類,並且init後是self以外的參
例子程序代碼:code
# -*- coding:utf-8 -*- class Person(object): __metaclass__=type def __init__(self,name="Jim"): "父類的構造方法,包含初始化屬性name" self.name=name self.flag=False print "Person",self.name def call(self): print self.flag,"name:",self.name self.flag = not self.flag class Programmer(Person): __metaclass__=type def __init__(self): "子類的構造方法,調用父類的構造方法,初始化屬性flag" #調用方式1 Person.__init__(self,"DOTJAR") print "Programmer" def setName(self,name="prgrmr"): self.name=name class Athlete(Person): __metaclass__=type def __init__(self,name="PaoZhu"): "子類的構造方法,調用父類的構造方法,初始化屬性flag" #調用方式2 注意無參 super(Athlete,self).__init__(name) print "Athlete" def setName(self,name="athlete"): self.name=name coder=Programmer() coder.call() coder.setName("dotjar") coder.call() print("----------------") athlete=Athlete() athlete.call() athlete.setName("LiuXiang") athlete.call()
輸出爲:對象
Person DOTJAR Programmer False name: DOTJAR True name: dotjar <class '__main__.Programmer'> \---------------- Person PaoZhu Athlete False name: PaoZhu