python-子类如何调用父类的__init__方法 Jun 10, 2020 · python · 分享到: 转载:python子类如何调用父类的__init__方法 版权声明:本文为CSDN博主「liuchunming033」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/liuchunming033/article/details/48498061 Python不会自动调用父类的constructor,你得亲自专门调用它。 有两种常用方法: 1父类名.__init__(self,参数) #注意名字是父类 2super(子类名,self).__init__(参数) #注意名字是子类,而且init后是self之外的参数 第一种方法,这种初始化的方式书写上比较简单,也比较容易阅读,例如 1# coding=utf-8 2class Person(object): 3 def __init__(self, name="jim"): 4 self.name = name 5 self.flag = False 6 print "Person",self.name 7 8 def call(self): 9 print self.flag,"name:",self.name 10 self.flag = not self.flag 11 12class Programmer(Person): 13 def __init__(self): 14 Person.__init__(self,"Dotjar") 15 print "Programmer" 16 17 def set_name(self,name): 18 self.name=name 19 20coder = Programmer() 21coder.call() 22coder.set_name("dotjar") 23coder.call() 该例子中,Programmer实例初始化的时候调用父类的__init__方法对flag属性进行初始化,初始化之后的属性值是False。注意,调用父类__init__方法的时候,传递的参数数量要与父类中的__init__保持一致。 程序运行结果是: 1Person Dotjar 2Programmer 3False name: Dotjar 4True name: dotjar 注意:运行的时候如果你的环境里有多个python解释器,一定要选对解释器了,否则有的时候可能会出错。运行程序的时候,最后打个断点debug一下,看看程序运行的步骤。 第二种方法,举个栗子: 1# coding=utf-8 2class Person(object): 3 def __init__(self, flag=False, name="jim"): 4 self.name = name 5 self.flag = flag 6 print "Person",self.name 7 8 def call(self): 9 print self.flag,"name:",self.name 10 self.flag = not self.flag 11 12class Programmer(Person): 13 def __init__(self, flag = True, name="Dotjar",age = 19): 14 self.age = 19 15 super(Programmer,self).__init__(flag,name) 16 print "Programmer's age:",self.age 17 18 def set_name(self,name): 19 self.name=name 20 21coder = Programmer() 22coder.call() 23coder.set_name("dotjar") 24coder.call() 这个例子对第一个例子进行了修改,首先父类中的__init__方法带有2个初始化属性,flag和name。子类的__init__方法比父类的__init__方法多了一个age属性,这个age属性只能在子类的__init__方法中初始化(因为父类中没有嘛,调用父类的__init__只能初始化父类和子类共有的属性)。 程序的输出是: 1Person Dotjar 2Programmer's age: 19 3True name: Dotjar 4False name: dotjar