首页 > 其他分享 >super的查找顺序严格按照mro列表找

super的查找顺序严格按照mro列表找

时间:2023-10-30 11:46:33浏览次数:34  
标签:__ name age init 查找 super self mro

调用父类方法的第一种方式:指名道姓的方式,跟继承关无关

# object写与不写,在py3中没有区别.
# 有的人在py3中这么写,是为了向下兼容,使复制到py2中也能使用
class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age
        
def init_1(self,name,age):
    self.name=name
    self.age=age

class Student:
    school = 'yyyy'
    def __init__(self,name,age,course):
        # 指名道姓的使用Person的__init__方法
        # Person.__init__(self,name,age)
        init_1(self,name,age)
        self.course=course
    
stu = Student('mayue',17,'python')
print(stu.name)

调用父类方法的第二种方式:用super关键字,跟继承关系有关

class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age
        
class Student(Person):
    school = 'yyyy'
    def __init__(self,name,age,course):
        # super()相当于得到了一个特殊对象,第一个参数不需要传,调用绑定方法会把自己传过去
        #__________self不需要传
        super().__init__(name,age)	# 继承和super关键字结合就可以实现继承和重用父类的属性和方法,减少代码的冗余
        
        # 看到有人这么写:super(类名,对象)	# 在py3中为了兼容py2
        # 在py3中这么写和省略写法完全一样
        # 在py2中必须super(Student,self)这么写
        # super(Student,self).__init__(name,age)
        
        self.course=course
    
stu = Student('mayue',17,'python')
print(stu.name)
print(stu.age)
print(stU.course)

总结,有继承关系的时候,通常用super

指名道的方式在什么情况下用?

第一种:没有继承关系

第二种:如果继承了多个父类,super是按照mro列表找,现在想指名道姓的用其中一个父类其中的方法,就需要指名道姓的使用

super练习: super是按照mro列表来找

class A:
    def f1(self):
        print('A.f1')

class B:
    def f1(self):
        print('B.f1')
    def f2(self):
        print('B.f2')
        super().f1()		# super 按照mro列表本身所在位置的下一层调用

class C(B,A):
# 注意这个顺序,这个是报错的
# class C(A,B):
    def f1(self):
        print('C.f1')

# C 实例化产生一个对象
c = C()
print(C.mro())
c.f2()

标签:__,name,age,init,查找,super,self,mro
From: https://www.cnblogs.com/hanyingshuo/p/17797410.html

相关文章

  • 二分查找模版
    给定一个有序数组nums,求数组中第一个>=目标值target的下标位置和最后一个>=目标值target的下标位置。这是一道基础的二分查找问题,关于二分的写法有很多种,难点在于对于二分边界的处理,代码编写的过程中很容易容易出现死循环问题,因此建议套用现成的一些二分模版,关于二分模版网上有很......
  • 用C语言,查找和判断年份是否为闰年
    今天我们来探讨一下用C程序代码来判断一个年份是否为闰年,或者题目给定一个年份区间,来查询里面有那些年份属于闰年:闰年的判断条件:1.能被4整除,但不能被100整除2.能被400整除运行结果如下:代码如下:#include<stdio.h>//打印1000到2000之间的闰年//闰年的判断条件:1.能被4整除,但不能被10......
  • 配置Supervisor开机启动
    配置Supervisor开机启动:新建一个“supervisord.service”文件#dserviceforsystemd(CentOS7.0+)#byET-CS(https://github.com/ET-CS)[Unit]Description=Supervisordaemon[Service]Type=forkingExecStart=/usr/bin/supervisord-c/etc/supervisor/supervisord.co......
  • java中native源码查找方法
    以Object的hashCode()方法为例:1.下载openjdk源码或从github中查找,这里以github中查找为例;2.GitHub中查找https://github.com/bpupadhyaya/openjdk-8/tree/master/hotspot源码;3.搜索到Object.c源码文件,并查找hashCode字眼,如下所示: 4.由上可知,hashCode方法实际是调用的jvm.c......
  • 如何在Git仓库中查找并恢复已删除的文件?
    内容来自DOChttps://q.houxu6.top/?s=如何在Git仓库中查找并恢复已删除的文件?假设我在一个Git仓库中。我删除了一个文件并提交了更改。我继续工作并进行一些更多的提交。然后,我发现在删除该文件后需要恢复它。我知道可以使用gitcheckout<commit>--filename.txt来检出一......
  • 根据二维表值区域,查找值所对应的左端行标题!
    1职场实例小伙伴们大家好,今天我们来继续讲解Excel在职场中的实例应用:如何根据二维表值区域,查找值所对应的左端行标题?这是公众号粉丝后台留言咨询的一个问题,这个问题具有一定的职场办公代表性,包含我们必须要掌握学习的基础函数以及数组思维,所以小编整理好了解题方案,以备大家不时之需......
  • C语言二分查找法新手
    如果有一天我们想通过输入一个数去查找这个数在数组的下标。我们应该怎么去实现呢?首先我们肯定要创建一个数组组,我们知道数组的数组是从零开始的,首先呢,我们要了解二分查找法可以在百度里面查到。二分查找也称折半查找,它是一种效率较高的查找方法。但是,折半查找要求线性表必须采......
  • 6、系统文件查找与文件管理
    综所周知,一个linux系统是由很多文件组成的,那么既然有那么多文件,那我们该如何管理这些文件呢?Linux中的所有数据都是以文件形式存在的,那么所有文件分别被归类到不同的文件系统中。而文件系统则是一种树型结构,通俗的理解为目录。在linux系统中,你所做的每一步操作及所执行的每个命令......
  • Django+celery使用supervisor进行进程守护
    1.库版本supervisor4.2.5django-celery-beat2.5.0django-celery-results2.5.1Django4.2.6环境:Linux项目路径:/opt/new/new_project2.制作软连接已知,Python的安装目录是/usr/local/python3,其下有bin/include/lib和share四个目录,其中bin里面就是我们安装pip库后的可......
  • 二分查找又称折半查找(Binary Search)
    ⛩️博主主页:@威化小餅干......