Python中super函数的详细用法,直观理解

深入解析Python中super()函数的底层机制与实战应用 本文深入解析Python中super()函数的底层机制与实战应用。通过剖析其作为函数与类的双重身份,并结合MRO(方法解析顺序)原理,揭示了super()如何实现动态查找与协作式继承。文章重点阐述了在构造函数、方法重写及多重继承等场景下的正确使用姿势与最佳实践,帮助开发者编写更灵活、健壮的面向对象代码。 阅读详情

super相关的介绍文章看了无数遍,每次看得都云里雾里的,没过多久就忘了,只模糊知道跟MRO有关,但是稍微一复杂就不知道怎么回事了,本篇文章主要记录我对super的理解

1.粗暴简单的理解

super的作用就是执父类的方法,虽然这句话不完全对,但是也差不多是那么个意思了。

比如以单继承为例

class A:
    def p(self):
        print('A')
class B(A):
    def p(self):
        super().p()
B().p()

>>> A

可以看到B().p()其实就是执行的A.p

2.万能模板解题技巧

前面介绍的是最简单的情况,那万一复杂一点,比如多继承的情况呢?这种情况我们只要知道 MRO 序列,无论super怎么变化都不怕了,记住公式就完事了。MRO 序列简单理解就是记录了各个类继承的先后顺序,看下面的例子就明白了

MRO 的介绍可以看这篇文章: https://python3-

cookbook.readthedocs.io/zh_CN/latest/c08/p07_calling_method_on_parent_class.html

我们看下面的例子

class A:
    def p(self):
        print('A')
class B():
    def p(self):
        print('B')
class C(A,B):
    def p(self):
        print('C')
class D(C):
    def p(self):
        print('D')
a = A()
b = B()
c = C()
d = D()

四个类的MRO (可以通过查看__mro__属性获得,例如A.__mro__)) 分别是:

A: (A, object)
B: (B, object)
C: (C, A, B, object)
D: (D, C, A, B, object)

什么意思呢,我们以A类为例,它的MRO顺序是他自己和object,很好理解,因为python里一切都是对象,所以你可以看到四个类的终点都是object。那C类的 MRO 也好理解,第一个顺序永远是寄几,然后按照代码顺序依次是 A,B,最后是object。

相信看到这你应该知道MRO是什么意思了吧,那super是怎么用的呢?

super本身其实就是一个类,super()其实就是这个类的实例化对象,它需要接收两个参数 super(class, obj),它返回的是obj的MRO中class类的父类(可能有点绕,待会看后面的栗子就好懂了):

  • class:就是类,这里你可以是A,B,C或者D
  • obj:就是一个具体的实例对象,即a,b,c,d。我们经常在类的__init__函数里看到super的身影,而且一般都是写成这个样子的super(className, self).__init__(),self其实就是某个实例化的对象。

3.举几个栗子

看到这里如果还是没明白,咱们就多看几个例子就完事了,建议你可以打开ipython输入如下示例,可以更加直观感受super:
栗子1

首先我们看看下面的命令是什么意思呢?

super(C, d).p()

前面我们说过super的作用是 返回的是obj的MRO中class类的父类,在这里就表示返回的是d的MRO中C类的父类:

  • 返回的是d的MRO:(D, C, A, B, object)
  • 中C类的父类:A

那么super(C, d)就等价于A,那么super(C, d).p()会输出A
栗子2

下面代码结果是什么呢?

super(A, c).p()

返回的是c的MRO中A类的父类:

  • 返回的是c的MRO:(C, A, B, object)
  • 中C类的父类:B

所以最后的输出是B

栗子.

注意:有的类里面没有super()

class A:
    def p(self):
        print('A')
class B(A):
    def p(self):
		super().p()
        print('B')
class C(B):
    def p(self):
        print('C')
class D(C):
    def p(self):
        print('D')

d = D()
d.p()

这个很简单,最后只会输出D

那如果D类改成如下样子呢?

class D(C):
    def p(self):
		super().p()
        print('D')

很简单,我们首先写出D的MRO为 (D,C,B,A,object),缺省状态下,super()就表示前一个父类,这里就是C类,那么super().p()就会调用C的p函数,但是C.p里没有调用super,所以就与A,B类无关了,那么最终的输出就是C,D

我们再看看最复杂的继承情况

class A:
    def p(self):
        print('A')
#Python小白学习交流群:153708845        
class B(A):
    def p(self):
        super().p()
        print('B')
class C(B):
    def p(self):
        super().p()
        print('C')
class D(C):
    def p(self):
        super().p()
        print('D')
d = D()
d.p()

这里建议你自己在纸上画一下

MRO

所以最终结果是 A B C D

4.总结

对于无论有多少个super(class, obj),我们首先需要知道obj的MRO是什么,然后找到class的前一个class是什么就好了。

kaggle竞赛平台上数据集下载详解 从kaggle 网站上下载数据集既保证了速度又避免了网络的不稳定造成下载失败问题。该平台也可以上传代码作为自己的代码库,不过本人更习惯将代码上传到github上。希望本人整理的kaggle库使用技巧能够帮助到正在阅读本博客的你。此外还有一篇博客针对kaggle数据集下载问题的几个问题的相关文章进行了整理【博客链接】。 阅读详情

相关推荐

Docker 安装 CentOS7

本文主要介绍了docker 下安装centos7。访问 CentOS 镜像库地址:https://hub.docker.com/_/centos?tab=tags&page=1。可以通过 Sort by 查看其他版本的 CentOS 。默认是最新版本 centos:latest 。 使用以下命令来查看是否已安装了 centos7: 启动centos容器,并把docker上centos的22端口映射到本机60001端口(端口号可以自己指定) 3、进入到Centos容器 4.安装ssh服务和网络必须软件

折腾java的博客 1万+

python的super函数详解

python基础知识中多继承super函数详解

m0_58357681的博客 1万+

Cursor聊天记录迁移工具:实现跨设备AI对话同步与备份

在软件开发中,数据持久化与迁移是常见需求,尤其当工具依赖本地存储时。SQLite作为轻量级关系型数据库,因其嵌入式、零配置特性,常被用于存储应用状态与用户数据。其WAL(预写式日志)模式提升了并发性能,但也增加了数据操作复杂性。通过命令行工具与JSON序列化技术,可以实现结构化数据的提取、转换与安全迁移,这对于保障开发资产的连续性与可移植性具有重要价值。例如,在AI辅助编程场景下,开发者与AI的对话记录包含关键的问题分析、解决方案与决策逻辑,是重要的上下文资产。cursor-chat-transfer工具正

weixin_42551967的博客 536

【Python】一文向您详细介绍 super().__init__()

🚀**Python超类初始化深度解析**🔍 📚掌握`super().__init__()`,开启Python面向对象编程新篇章!从基础用法到深入解析,本文带你探索`super()`的奥秘。🔬了解工作原理,明晰显式与隐式调用的差异,掌握多重继承中`super()`的妙用。🌈应用场景广泛,从框架开发到插件设计,无处不体现其威力。🚀读完本文,你将轻松驾驭Python的类继承与初始化,为编程之路添砖加瓦!#Python #super().__init__() #面向对象编程 #类继承 #初始化方法

创作高质量博文,分享知识,共同进步! 1475

Oracle迁移至华为GaussDB SQL语法和存储过程转换

在将Oracle数据库迁移至GaussDB时,SQL语法和存储过程的转换是确保应用程序正常运行和数据完整性的关键环节。由于两者在数据类型、函数、过程语言等方面存在差异,必须系统化地进行转换和测试。正则表达式脚本:批量替换常见的语法差异。SQL解析工具:解析SQL脚本,生成GaussDB兼容的语法。代码审查工具:自动检查转换后的代码,确保语法和逻辑正确。将Oracle迁移至GaussDB涉及到SQL语法和存储过程的全面转换。通过系统化的转换步骤、使用合适的工具并结合手动调整,可以确保迁移过程的顺利进行。

weixin_38428874的博客 2399

常见的电容有哪些

电容在电路板中非常常见,类别纷繁复杂,本文化繁为简,主要介绍下常见电容。

qq_40170041的博客 769

子类构造函数中super()方法的理解

先说说对构造函数的理解: 1,函数名于类名相同。 2,没有返回值。 3,没有return。 4,每个类都有一个默认无参的构造函数,初始化该类的时候,先走构造函数,用于初始化成员变量和方法。 5,一个类如果自定义了构造函数,则默认的无参构造函数没有了,如果需要无参的构造函数,必须手动添加。 再说说子类和父类关于super()方法的调用: 1,super(); 就是调用父类的构造函数。 ...

asdfghjklor的博客 7305

别再买错磁铁了!手把手教你为TLE5012B/AS5047等磁编码器选配和安装径向充磁磁铁

本文详细解析了为TLE5012B/AS5047等磁编码器选配和安装径向充磁磁铁的关键要点。从充磁方向的物理本质到供应商沟通技巧,再到安装工艺的黄金法则,帮助工程师避免常见错误,确保磁编码器稳定工作。特别强调了径向充磁的重要性及验证方法,并提供了尺寸选择、温度特性和抗干扰设计的实用建议。

weixin_26750481的博客 317

详解super()函数

详解super()函数 super()函数用于访问和调用一个对象上的父对象上的函数。 前言 super.prop 和 super[expr]表达式在类和对象字面量任何方法定义中都是有效的。 一、语法? super([arguments]) //调用 父对象/父类 的构造函数 super.functionOnParent([arguments]); //调用 父对象/父类 上的方法 二、描述 在构造函数中使用时,super关键字将单独出现,并且必须在使用this关键字之前使用。 super关键字也可以调用父

qq_41986353的博客 2万+

【ArcGIS风暴】Win10操作系统ArcGIS许可License无法启动的解决方法汇总(绝对成功!)

文章目录1. 关闭Windows Defender2. 关闭系统防火墙3. 删除迈克菲(McAfee)杀毒软件4. 在系统服务中启动 在安装ArcGIS软件时,最重要的一步是许可服务的正常启动,通常,由于各种各样的原因,ArcGIS许可管理器License Manager十有八九会无法启动,点N多次都没反应,如果许可服务不能如愿启动的话,即使Desktop安装成功,也是无法打开的。本文汇总了Win10操作系统之上ArcGIS安装过程中可能会导致服务无法启动的原因及解决办法。 ArcGIS安装参考教程:

智慧空间实验室 2万+

YOLOv8改进 | Conv篇 | 轻量级下采样方法ContextGuided(大幅度涨点)

ContextGuided通过创新的局部-全局协同机制,解决了传统下采样方法中细节丢失与上下文缺失的核心痛点。实验证明其在YOLOv8上可实现最高2.6%的mAP提升,且计算开销增加不足5%。这种即插即用的设计为实时目标检测系统提供了新的优化方向。创新启示:轻量化不代表简单裁剪,智能信息融合才是未来方向!下一步探索与Transformer结合构建混合架构多尺度上下文融合机制3D点云中的扩展应用资源获取完整训练代码:[GitHub链接]预训练模型:[Google Drive链接]讨论话题。

QQ_778132974的博客 291

python类

类的创建和使用

WizardtoH 318

【OpenClaw从入门到精通】第73篇:30天OpenClaw实战挑战——从零搭建个人数字助理(Day15-21)万字超详细高阶实战版

经过前两周的基础部署与功能搭建,你已拥有可自动化干活的AI助理与数字员工团队,但距离“高阶精通”仍有差距。本文聚焦第三周(Day15-21)核心实战,围绕安全审计、语音能力接入、Token成本控制、Agent Loop优化、One-Liner指令五大核心模块,结合真实落地案例与踩坑经验,提供超详细实操指南。通过本文,你将掌握生产级安全加固方案、语音交互全流程配置、低成本高性价比使用策略、Agent自主闭环优化技巧,以及一句话搞定复杂任务的高效指令用法,同时完成中期复盘与最后九天冲刺规划

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 364

python super函数用法_Python中super函数用法实例分析

本文实例讲述了Python中super函数用法。分享给大家供大家参考,具体如下:这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简单说, super函数是调用下一个父类(超类)并返回该父类实例的方法. 这里的下一个的概念参考后面的MRO表介绍.help介绍如下:super(type, obj) -> bound super obj...

weixin_39759270的博客 226

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Python中的super()函数的用法

描述: super()函数是用于调用下一个父类(超类、基类)并返回该父类实例的一个方法。 super()函数是用来解决多重继承问题的,直接用类名调用父类方法使用单继承的时候没有问题,但是如果使用多重继承时会涉及查找顺序(method resolution order MRO)、重复调用(钻石继承)等问题。 MRO就是了ide方法解析顺序,其实就是继承父类方法时的顺序表。 语法: sup...

我脾气很好 9979

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

python中的super用法详解_Python中super函数用法实例分析

本文实例讲述了python中super函数用法。分享给大家供大家参考,具体如下:这是个高大上的函数,在python装13手册里面介绍过多使用可显得自己是高手 23333. 但其实他还是很重要的. 简单说, super函数是调用下一个父类(超类)并返回该父类实例的方法. 这里的下一个的概念参考后面的MRO表介绍.help介绍如下:super(type, obj) -> bound super ...

weixin_39987847的博客 595

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Python的super函数到底做了啥

Python的super函数到底做了啥 super相关的介绍文章有很多,而且在python中使用得也较多,尤其是在定义深度神经网络模型时,相信大家对于 super(className, self).__init__() 这一语句不会感到陌生。本篇文章主要记录我对super的理解,给大家以尽量简单易懂的方式进行介绍。 一、直观的理解 super的作用就是执父类的方法 以单继承为例: class A: def a(self): print('A') class B(A): .

海不辞水故其深 2808

玩转 Python super 函数

编程小白看到 super 函数就发怵,奇怪的语法难以清晰的描述。本文首先定义 super 的使用场景,再通过变换一个实例为 super 函数祛魅。

frank_haha的博客 1328

python中superclass是什么_Python中super()函数简介及用法分享

首先看一下super()函数的定义:super([type [,object-or-type]])Return a **proxy object** that delegates method calls to a **parent or sibling** class of type.返回一个代理对象, 这个对象负责将方法调用分配给第一个参数的一个父类或者同辈的类去完成.parent or si...

weixin_39649405的博客 429

Python进阶 - 父类方法的调用 super函数的使用技巧

🐍 Python进阶:父类方法调用与 super() 函数的使用技巧 本文深入探讨了Python中super()函数的原理与应用,主要内容包括: 基础概念:super()用于调用父类方法,避免硬编码父类名,支持方法解析顺序(MRO)机制。 单继承应用:通过Animal/Dog类示例展示如何用super()实现父类方法调用和属性初始化链。 多继承与MRO:分析多重继承场景下super()的执行顺序,通过D(B,C)类示例演示C3算法决定的方法调用顺序。 常见误区: super()不直接调用父类而是按MRO顺

千淘万漉虽辛苦,吹尽狂沙始到金 8221

使用super函数

__metaclass__=type#super函数只在新式类中起作用 class Bird: def __init__(self): self.hungry=True def eat(self): if self.hungry: print('Ahhh...') self.hungry=Fals...

salmonwilliam的博客 599

Python 的内置函数 super

Python内置函数super()用于在子类中调用父类方法,是面向对象编程的关键工具。它遵循方法解析顺序(MRO),支持单继承和多重继承场景。常见用法包括初始化父类状态、扩展父类方法等。在Python 3中可直接使用super(),而Python 2需显式传入参数。典型应用出现在类初始化、方法重载和协作式多重继承中。正确使用super()能使代码更清晰易维护,但需注意其在不同继承场景下的行为差异。

IMPYLH的博客 296

[python] super() 用法

问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如下: class A: def __init__(self): print "enter A" print "leave A" class B(A): def __init__(self): print...

XIEXINGHUA2010的博客 173

【Python基础编程】继承、重写与super详解

上篇文章主要了解面向对象中的类和对象、实例属性和实例方法等,接下来继续深入了解python的面向对象,冲冲冲!关联:描述一般的联系或依赖。聚合:整体-部分关系,但部分可以独立存在。组合:更强的整体-部分关系,部分依赖整体的生命周期。继承:子类继承父类,复用代码。依赖:一种临时的“使用”关系。这些关联类型帮助开发者更好地组织和管理代码结构,使得软件设计更加模块化、可维护。super()函数用于调用父类的方法,确保在子类中扩展或重写方法时能够利用父类的实现。在构造函数中使用super()

易辰的博客 1485

Python的super ()内置函数介绍

Python的super ()内置函数介绍

cnds123的专栏 376

小序 super() 函数

如果你使用的是新版Python,就应使用函数super。这个函数只适用于新式类,而你无论如何都应使用新式类。调用这个函数时,将当前类和当前实例作为参数。对其返回的对象调用方法时,调用的将是超类(而不是当前类)的方法。因此,在SongBird的构造函数中,可不使用Bird, 而是使用super(SongBird, self)。 另外,可像通常那样(也就是像调用关联的方法那样)调用方法 __init__ 。在Python 3中调用函数super时,可不提供任何参数(通常也应该这样做),而它将 像变魔术一样完成

绿色羽毛 423
上一篇: Python中最常用的5种线程锁,你都会用吗
下一篇: 5道Python基础练习题
Python热爱者
博客等级 码龄7年 3059粉丝 1330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值