首页 > 编程语言 >python的类继承总结

python的类继承总结

时间:2023-04-01 23:13:00浏览次数:36  
标签:总结 __ python 子类 self 继承 init 父类 方法

参考文档:

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)方法,直接用子类对象调用父类实例属性成功

 







标签:总结,__,python,子类,self,继承,init,父类,方法
From: https://www.cnblogs.com/meblogs-08/p/17279653.html

相关文章

  • Python内存管理
    Python内存管理的三个阶段:1.引用计数引用计数是Python内存管理的第一道防线。当一个对象被引用时,Python会为其分配一段内存,并将其引用计数设置为1。当对象被多次引用时,其引用计数会逐渐增加。当一个对象不再被引用时,Python将其引用计数减少1。当一个对象的引用计数变为......
  • 每日总结2023-04-01
    今天完成了部分界面并修改了部分之前的界面成果:广告收益界面,LIstView中没有数据,暂时没有显示第二个界面用于车主添加产品类别,登记种类和数量第三个界面美化第四个界面为设备绑定界面 ......
  • 2023/04/01每日总结
    今天学习html,发现web页面不会做,现在从头开始学。准备做一个课表 ......
  • AcWing第97场周赛复盘总结
    4944.热身计算-AcWing题库给定两个正整数$a,b$,请你分别计算$\min(a,b)$以及$\lfloor\frac{|a-b|}{2}\rfloor$的值。$\lfloor\frac{|a-b|}{2}\rfloor$表示不大于$\frac{|a-b|}{2}$的最大整数。输入格式共一行,包含两个正整数$a,b$。输出格式共一......
  • 计算机网络学习总结(进程之间的通信)
    进程之间通信的方式之一是利用socket最近学习了计算机网络的一些知识,下面是我自己的一些简单理解,可能有些错误的地方(狗头保命)首先长报文在发送的时候是以分组的形式发送的,由应用层发送应用层报文到运输层然后运输层对接收到的每个分组加上一个运输层首部,然后发送到网络层网络......
  • PTA题目集1-3总结
    PTA题目集1-3总结一、     前言不知不觉java已经学习了三个星期了,在学习的过程也收获了不少,由于有C语言的铺垫,语法变化不是很大,如递归,选择,循环,和C语言中的类似,使得在学习语法的过程中比较轻松。但是在更重要的是面向对象的加入,在解决问题的思路和方法上与C语言截然不同,使......
  • pta总结
    本三次题目知识点很多,运用了多种方法,需要我们掌握各种语法的作用,以及慢函数哦,设计对象啊!等等,很多很多Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间这也就要求我们软件工程师要不断地学习,在Java5以前,switch(expr)中,expr......
  • 【转载】 解决VSCode运行或调试python文件无反应的问题
    ————————————————版权声明:本文为CSDN博主「姜行者」的原创文章,遵循CC4.0BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/kraisi/article/details/127287966  ====================================================  ......
  • Linux服务器MySQL操作总结
    目录1.Navicat连接服务器MySQL2.如何查看MySQL用户名和密码3.修改MySQL的登录密码4.安装MySQL开发包(Centos7版)错误:error1045(28000):accessdeniedforuser'root'@'localhost'(usingpassword:yes)1.Navicat连接服务器MySQL1.选择数据库直接使用第一个MySQL即可......
  • 每日总结--2023/3/31(解决了数据库连接不正常的问题,完成了javaweb暂时的配置)
    今天耗费一天的时间总算是找到了问题所在.问题出在mysqlServlet的版本上。在重装系统前,我所装的mysqlSevlet版本是5.0左右的,所以连接数据库的驱动也是5.0,包括url,而在重装系统后我的mysqlSevlet版本是8.0以上的,所以用原来的语句是不正确的,要修改为8.0版本的才能够运行,同......