python的类继承总结
参考文档:
https://blog.csdn.net/yilulvxing/article/details/85374142
总结如下:
第一种情况: 子类和父类都有 __init__(self)方法情况继承研究
#如果子类也有init方法,那么调用父类的实例属性必须要在子类的init()方法中有这个super().__init__()【这点尤其要注意】
# 如果子类也有init方法,调用父类的类属性(注意不是实例属性),不是必须要在子类的init()方法中写super().__init__(),写不写都可以调用成功
# 如果子类也有init方法,调用父类的实例方法,不是必须要在子类的init()方法中写super().__init__(),写不写都可以调用成功
第二种情况:子类没有 __init__(self)方法,父类有 __init__(self)方法情况继承研究
# 子类没有 __init__(self)方法,可直接用子类对象调用父类实例属性成功 【子类没有init方法,相当于实例化的时候直接用的父类的__init__()方法】
第三种情况: 子类重写父类方法(即子类方法名和父类的方法名相同)
如果子类没有重写父类的方法,当调用该方法的时候,会调用父类的方法,当子类重写了父类的方法,默认是调用自身的方法。
另外,如果子类Son重写了父类Father的action方法,如果想调用父类的action方法,可以利用super() 【这点尤其要注意】
"""子类和父类都有 __init__(self)方法情况继承研究""" class A: m = 3 def __init__(self): self.a = 1 def dog(self): print("dog") class B(A): def __init__(self): # super().__init__() #如果子类也有init方法,那么调用父类的实例属性必须要有这个super().__init__() # self.a1 = self.a #调用父类的实例属性 # 如果子类也有init方法,调用父类的类属性(注意不是实例属性),不是必须要写super().__init__(),写不写都可以调用成功 self.m1 = self.m #调用父类的类属性 def check(self): #父类的实例属性 print(self.a1) def cat(self): #父类的类属性 print(self.m1) def son_dog(self):#子类和父类的方法不同名的时候,调用父类的方法能用self.父类方法 # 如果子类也有init方法,调用父类的实例方法,不是必须要写super().__init__(),写不写都可以调用成功 self.dog() #子类和父类的方法不同名,调用父类方法 def dog(self): #子类和父类的方法同名的时候,调用父类的方法不能用self.父类方法,只能用super().父类方法 # 如果子类也有init方法,调用父类的实例方法,不是必须要写super().__init__(),写不写都可以调用成功 super().dog() #子类和父类的方法同名,调用父类方法 if __name__ == '__main__': oj = B() oj.son_dog() oj.dog() oj.cat()
"""子类没有 __init__(self)方法,父类有 __init__(self)方法情况继承研究""" class Father(): def __init__(self): self.a = 'aaa' def action(self): print('调用父类的方法') class Son(Father): pass son = Son() # 子类Son 继承父类Father的所有属性和方法 son.action() # 调用父类方法 print(son.a) # 子类没有 __init__(self)方法,直接用子类对象调用父类实例属性成功
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· 单线程的Redis速度为什么快?
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码