1.派生类中调用基类的__init__()方法
在派生类中定义__init__()方法时,不会自动调用基类的__init__()方法。
例如:定义一个Fruit类,在__init__()方法中创建类属性color,然后再Fruit类中定义一个harvest()方法,在该方法中输出类的属性color的值,在创建继承自Fruit类的Apple类,最后创建Apple类的实例,并调用harvest()方法。
例如:
class Fruit: def __init__(self,color='绿色'): Fruit.color=color def harvest(self): print("水果原来是:"+Fruit.color+"的") class Apple(Fruit): def __init__(self): print("我是苹果") apple=Apple() apple.harvest()
执行上面的代码,会弹出相关的异常信息。
因此,要让派生类调用基类的__init__()方法进行必要的初始化,需要在派生类使用super()函数调用基类的__init__()方法。
例如:在上面的例子中,修改为:
class Fruit: def __init__(self,color='绿色'): Fruit.color=color def harvest(self): print("水果原来是:"+Fruit.color+"的") class Apple(Fruit): def __init__(self): print("我是苹果") super().__init__() apple=Apple() apple.harvest()
class Fruit: #定义水果类(基类) def __init__(self,color='绿色'): Fruit.color=color #定义类属性 def harvest(self,color): print("水果是:"+self.color+"的") #输出的是形式参数color print("水果已经收获") print("水果原来是:"+Fruit.color+"的") #输出的是类属性color class Apple(Fruit): #定义苹果类(派生类) color="红色" def __init__(self): print("我是苹果") super().__init__() #调用基类的__init__()方法 class Sapodilla(Fruit): #定义人参果类(派生类) def __init__(self,color): print("我是人参果") super().__init__(color) #调用基类的__init__()方法 def harvest(self,color): print("人参果实:"+color+"的") #输出形式参数color print("人参果已经收获") print("人参果原来是:"+Fruit.color+"的") #输出的是类属性color apple=Apple() apple.harvest(apple.color) sapodilla=Sapodilla("白色") sapodilla.harvest("金黄色带紫色条纹")
花絮:
本期的Python 面向对象就分享到这里,下期我们将继续分享Python模块的相关知识,感兴趣的朋友可以关注我。
同时也可以关注下我的个人 微信订阅号,园子里面的文章也会第一时间在订阅号里面进行推送跟更新。