python類繼承中構造子的調用

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
相關文章
相關標籤/搜索