当前位置: 首页 > news >正文

Python类super(super().__init__())

       Python中类的初始化都是__init__(), 所以父类和子类的初始化方式都是__init__(), 但是如果子类初始化时没有这个函数,那么他将直接调用父类的__init__(); 如果子类指定了__init__(), 就会覆盖父类的初始化函数__init__(),如果想在进行子类的初始化的同时也继承父类的__init__(), 就需要在子类中显示地通过super()来调用父类的__init__()函数。

class Animal:  # 定义一个父类
    def __init__(self):  # 父类的初始化
        self.name = 'animal'
        self.role = 'parent'
        print('I am father')
 
class Dog(Animal):  # 定一个继承Animal的子类
    def __init__(self):  # 子类的初始化函数,此时会覆盖父类Animal类的初始化函数
        super(Dog, self).__init__()  # 在子类进行初始化时,也想继承父类的__init__()就通过super()实现,此时会对self.name= 'animal'
        print('I am son')
        self.name = 'dog'  # 定义子类的name属性,并且会把刚才的self.name= 'animal'更新为'dog'
# animal = Animal()#I am father
xbai = Dog()#I am father,I am son
print(xbai.name)#'dog'
print(xbai.role)#'parent'

super(Dog,self)也可以写成super(),可以理解成super(Dog,self).__init__() == Animal.__init__(self),( super(Dog,self) == Animal ) 即其返回的是当前类的继承顺序中(针对多继承)Dog后的一个类(也即类Animal)

self 和 super的区别:

    self会首先调用自己的方法或者属性,当自身没有目标属性或方法时,再去父类中寻找;super会直接去父类中寻找目标属性或方法。如上述代码中定义完第十行后,self.name的返回值为’dog’,而super().name的返回值为’animal’;
    self是类,super是预编译指令
 

super().init()是python3中简化后的方法,功能和super(self.class, self).init()一样

相关文章:

  • 自回归模型(Autoregressive model)(auto)
  • Pytorch tensorboard与tensorboardX的区别
  • Pytorch中的BN和IN(affine仿射, track_running_stats)
  • Pytorch修改tensor值
  • Siamese Network(孪生网络/连体网络) (few-shot learning)
  • inplace=True (原地操作)
  • 服务器内存泄漏
  • linux快速目录切换(cd - ,dirs, pushd, popd)
  • Python同时输出到屏幕和文件(Logger)
  • 图像通道转换——tensor从[h, w, c]转为[c, h, w] (permutetranspose和view的区别)(reshape和view)
  • linux服务器精确kill掉占用某几张卡的显存的程序
  • onnx 跨框架的模型中间表达框架(onnx.js)
  • Linux下删除文件后变成.nfsxxxxxx
  • linux lsof命令(查看哪个进程在占用文件)
  • TensorRT(GIE)
  • php的引用
  • 【个人向】《HTTP图解》阅后小结
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • ERLANG 网工修炼笔记 ---- UDP
  • es的写入过程
  • JavaScript的使用你知道几种?(上)
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Material Design
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 聊聊directory traversal attack
  • 三分钟教你同步 Visual Studio Code 设置
  • 什么是Javascript函数节流?
  • 实现简单的正则表达式引擎
  • 正则与JS中的正则
  • Python 之网络式编程
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #### go map 底层结构 ####
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $.ajax()
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (附源码)计算机毕业设计高校学生选课系统
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET 反射 Reflect
  • .NET4.0并行计算技术基础(1)
  • .NET导入Excel数据
  • .NET的微型Web框架 Nancy
  • .NET下的多线程编程—1-线程机制概述
  • .net中的Queue和Stack
  • .net中调用windows performance记录性能信息
  • .net专家(高海东的专栏)