首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么super只有class属性的一个子集?

super是Python中的一个内置函数,用于调用父类的方法。它只有一个class属性的子集,是因为super函数的作用是返回一个临时对象,该对象绑定了父类的方法,可以通过该对象调用父类的方法。

在Python中,一个类可以有多个父类,这种情况下称为多继承。当使用super函数调用父类方法时,它只能调用第一个父类中的方法,而不能调用其他父类的方法。这是因为super函数只能返回一个绑定了第一个父类方法的临时对象。

这种设计是为了避免多继承中的方法冲突问题。如果super函数可以调用所有父类的方法,那么在多继承中可能会出现方法名冲突的情况,导致调用的方法不确定性增加。为了保持代码的可读性和可维护性,Python选择了只提供第一个父类方法的调用方式。

总结起来,super函数只有class属性的一个子集,是为了解决多继承中的方法冲突问题,保证代码的可读性和可维护性。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云官网:https://cloud.tencent.com/
  • 云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 云原生应用引擎(TKE):https://cloud.tencent.com/product/tke
  • 云数据库 MySQL 版(TencentDB for MySQL):https://cloud.tencent.com/product/cdb_mysql
  • 云存储(COS):https://cloud.tencent.com/product/cos
  • 人工智能(AI):https://cloud.tencent.com/product/ai
  • 物联网(IoT):https://cloud.tencent.com/product/iot
  • 移动开发(移动推送、移动分析、移动测试等):https://cloud.tencent.com/product/mobile
  • 区块链(BCS):https://cloud.tencent.com/product/bcs
  • 元宇宙(Metaverse):https://cloud.tencent.com/product/metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

java类和对象(中.1)(继承性详解)

(废话扯一波)我们知道定一个person类,包括了string name,int age 等,有了这个类以后,我们如果想定义一个student类,如果没有现在知识点,我们是不是又得重新去定义一个学生类中...为什么要有继承? 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中, 那么多个类无需再定义这些属性和行为,只要继承那个类即可。...在子类中,可以使用父类中定义方法和属性,也可以创建新数据和 方法。  在Java 中,继承关键字用是“extends”,即子类不是父类子集, 而是对父类“扩展”。  ...这就要提到我们关键字super了 在Java类中使用super来调用父类中指定操作: super可用于访问父类中定义属性 super可用于调用父类中定义成员方法 super可用于在子类构造器中调用父类构造器...注意: 尤其当子父类出现同名成员时,可以用super表明调用是父类中成员 super追溯不仅限于直接父类 super和this用法相像,this代表本类对象引用,super

47430
  • Java继承概念及方法

    继承格式 在 Java 中通过 extends 关键字可以申明一个类是从另外一个类继承而来,一般形式如下: 类继承格式 class 父类 {}class 子类 extends 父类 {}...为什么需要继承 接下来我们通过实例来说明这个需求。...java 中若要在子类调用父类方法,需使用关键字super。 面向对象编程——继承和多态 1、为什么使用继承 从已有的类派生出新类,称为继承。...但如果子类覆盖或重写了父类方法,则只有使用 super 才能在子类中调用父类中被重写方法。 4、this 关键字 this 关键字表示当前对象。...调用父类构造方法; 调用父类方法(子类覆盖了父类方法时); 访问父类数据域(可以这样用但没有必要这样用)。 子类不是父类子集,子类一般比父类包含更多数据域和方法。

    44920

    Python每日一题:MRO

    .B, multi_extends_test01.Base, object] """ 从结果我们可以看出,一个 MRO 列表会包含它所有父类 MRO 列表,即父类 MRO 列表其实是子类一个子集...下面让我们来仔细看下 super() 这个方法,它接受两个参数,第一个参数是当前子类名称,第二个参数是 self ,它是一个固定参数,代表是当前实例对象。...__class__.mro() 得到当前类 MRO 列表 根据列表顺序,取列表第二个元素,返回 这样就能解释之前代码为什么会这样输出了。...__class__.mro # 4.2 返回 MRO 列表中第二个元素,也就是 A super(C, self)....最后一个问题来了,为什么 Python 要设置一个 MRO 列表来规定继承中类执行顺序呢?这是因为像我之前学过 JAVA 语言,它是单继承一个属性方法调用是十分明确

    51920

    自定义异常实现和测试以及异常注意事项

    * 而我们自己随意一个类,是不能作为自定义异常类来看待,要想你类能是一个自定义异常类,就必须继承自Exception类或者RuntimeException类。...5 * 而我们自己随意一个类,是不能作为自定义异常类来看待,要想你类能是一个自定义异常类,就必须继承自Exception类或者RuntimeException类。...(父亲坏了,儿子不能比父亲更坏) *    B:如果父类抛出了多个异常,子类重写父类时,只能抛出相同异常或者是父类异常子集,子类不能抛出父类没有的异常。...为什么呢?按理说 d = sdf.parse(s); 这一句就可以初始化了啊?...36 try { 37 d = sdf.parse(s); // 编译期异常,因为编译时候,我不知道try里面有什么语句(编译只检查语法),只有运行时候才知道

    1.1K10

    【JavaSE学习】 Day5JavaSE面向对象(中)看这三篇就够了

    子类继承父类以后,还可以声明自己特有的属性或方法:实现功能拓展。 子类和父类关系,不同于子集和集合关系。extends:延展、扩展。 Java中继承性说明 一个类可以被多个子类继承。...三、super关键字 super 关键字可以理解为:父类 可以用来调用结构:属性、方法、构造器 super调用属性、方法  我们可以在子类方法或构造器中。...通过使用"super.属性"或"super.方法"方式,显式调用父类中声明属性或方法。但是,通常情况下,我们习惯省略"super."  ...特殊情况:当子类和父类中定义了同名属性时,我们要想在子类中调用父类中声明属性,则必须显式使用"super.属性"方式,表明调用是父类中声明属性。...:super() 在类多个构造器中,至少一个构造器中使用了"super(形参列表)",调用父类中构造器 四、子类对象实例化全过程 理解即可。

    65420

    第七章 面向对象编程(进阶)

    子类在继承父类以后,还可以扩展自己特有的功能(体现:增加特有的属性、方法) extends:延展、扩展、延伸 子类和父类理解,要区别于集合和子集 不要为了继承而继承。...2.3 继承格式 ‍ class A{ //属性、方法 } class B extends A{ } ‍ 继承中基本概念: 类 A: 父类、superClass、超类、基类 类 B: 子类...,this 代表本类对象引用,super 代表父类内存空间标识 4.1 为什么需要 super? ‍...4.4 super 调用属性、方法 ‍ 子类继承父类以后,我们就可以在子类方法或构造器中,调用父类中声明属性或方法。(满足封装性前提下) 如何调用呢?需要使用"super."...结构,表示调用父类属性或方法。 一般情况下,我们可以考虑省略"super."结构。但是,如果出现子类重写了父类方法或子父类中出现了同名属性时, 则必须使用"super."

    14810

    python实现单例模式5种方法

    单例模式会阻止其他对象实例化其自己单例对象副本,从而确保所有对象都访问唯一实例。 那么,为什么不直接使用全局变量,而要搞一个单例出来?单例到底比全局变量好在哪儿?...首先,全局变量不能保证全局只有一个实例,你完全可以声明同一个多个实例。...当然,如果你注意一点,那么用全局方法保证全局只有一个该类实例还是可以做到,但你得很注意,让自己不要在其他地方声明多一个实例。...什么时候用单例 单例使用主要是在需要保证全局只有一个实例可以被访问情况,比如系统日志输出、操作系统任务管理器等。..._state return ob class MyClass2(Borg): a = 1 创建实例时把所有实例dict指向同一个字典,这样它们具有相同属性和方法.

    6.2K10

    Python - 面向对象编程 - __new__() 和单例模式

    目的:让某一个类创建实例对象,在整个应用程序中只有唯一一个实例对象而且该对象易于外界访问,从而方便对实例个数控制并节约系统资源 每一次执行 返回对象,内存地址是相同 类名() 单例设计模式应用场景...为什么要单例模式? 提问:如何保证一个只有一个实例并且这个实例易于被访问呢?...,将对象引用作为第一个参数,传递给 __init__ 方法 重写 __new__ 方法 重写代码是固定 重写 __new__ 方法一定要在最后 return super()....;单纯重写 __new__ 方法并不能实现单例模式 __new__ 实现单例模式逻辑 单例:在整个应用程序中只有唯一一个实例对象 定义一个属性,来保存单例对象引用 重写 __new__ 方法...如果类属性 is None,则调用父类方法分配内存空间,并赋值给类属性 如果类属性已有对象引用,则直接返回 单例模式代码实现 # 单例模式 class PoloBlog: instance

    60130

    Java学习笔记【持续更新】

    对于事物描述通常只关注两方面:一个属性一个是行为,只要明确该事物属性和行为并定义在类中即可! 类与对象关系: 类:事物描述 对象:该类事物实例,在java语言中通过new来创建!...原因是,在子类构造函数中第一行有一个默认隐式语句:super() 子类实例化过程:子类中所有的构造函数默认都会访问父类中空参数构造函数 为什么子类实例化时候要访问父类中构造函数呢?...那是因为子类继承了父类,获取到了父类中内容(属性),所以在使用父类内容之前,要先看父类是如何对自己内容进行初始化。 所以子类在构造对象时,必须访问父类中构造函数 为什么完成这个必须动作?...4.final修饰变量是一个常量,只能赋值一次 为什么要用final修饰变量,其实在程序如果只有一个数据是固定,那么直接使用这个数据就可以了,但是这样阅读性差,所以它给数据起个名称 而且这个变量名称值不能变化...2.如果父类抛出多个异常,那么子类只能抛出父类异常子集。 简单说:子类覆盖父类只能抛出父类异常或者子类或者子集。 注意:如果父类方法没有抛出异常,那么子类覆盖时绝对不能抛。

    1.3K50

    面向对象三大特征——封装,继承,多态

    { ....... } 注意点: java中只有单继承,没有多继承 所有类统一拥有一个父类—Object类 继承只是类一种关系,除此之外还有依赖,组合,聚合等关系 子类继承父类public和...属性 super.name:父name属性 //main函数 public class application { public static void main(String[] args)...(系统自动) 当super调用父类构造方法,必须在子类构造方法一个 当父类不包含无参构造方法时,必须在子类构造方法中一个写入super()构造方法;或者为父类添加无参构造方法 super和this...为什么要重写方法: 父类功能,子类不一定需要 父类功能,子类不一定满足 方法重写static和非static区别: static:不属于方法重写,一切命令遵循左边数据类型决定 非static:属于方法重写...(); 对象所能执行方法取决于左侧类型: 父类可以使用父类子类都存在方法:使用子类版本 父类可以使用只有父类存在方法:使用父类版本 父类不可以使用只有子类存在方法;但可以通过转换((子类)

    48430

    Objective-c 知识总结 -- 继承

    (不改变代码最终效果) polymorphism 多态 ---- 知识点: 为什么要使用继承? 继承在Objective-C中语法表示? ---- 为什么要使用继承?...结:我们都知道,圆和方形都是几何图形,而面向对象编程,就是对现实世界抽象,而圆和方形抽象就是几何图形;换种方式描述就是,几何图形是圆、方形父集(父亲),圆、方形是几何子集(子女)。...(一个类(子类)特性(属性+方法+协议......)来源于另一个类(父类)) 继承在Objective-C中语法表示?...,是声明实例变量; @implementaion 和 @end 是一对,表明对方法实现; 观察 Shape (.m)文件可以发现,只有 draw 方法是空,因为我们清楚圆和方形绘制方式是不同...默认是@protected,子类可以继承父类实例变量,但是是否可以访问,就看权限修饰符; 如果是使用属性@property进行声明,就要查看相应属性修饰符; 3.方法调度优先级: When code

    64510

    开源图书《Python完全自学教程》8.5.1单继承

    >>> class P: p = 2 ... >>> class C(P): pass ... 定义类 P (注意写法,因为代码块只有一行,所以可以如上所示书写),里面只有一个属性。...虽然类 C 代码块只有 pass ,在其中没有定义任何属性和方法,但是由于它继承了类 P ,父类中所定义属性 p 及其值就会被“代入”到类 C : >>> hasattr(C, 'p') True...另外,子类继承父类同时,也可以重新定义父类中某些属性或方法,即用同名称属性和方法覆盖父类原有的对应部分,使其获得与父类不同功能。 >>> class D(P): ......下面列举一个示例,从中既能理解单继承含义,也能明白为什么要继承——本节开篇未解释为什么,而是单刀直入介绍继承写法,读者可以通过此示例理解“为什么”。...在单继承中,为了解决此问题,可以使用 Python 一个内置 super() 函数。

    23730

    Android Apk瘦身方案1——R.java文件常量内联

    先创建一个最简单工程,看看 R.java 文件内容: R文件生成目录为app/build/generated/not_namespaced_r_class_sources/xxxxxDebug...为什么R文件可以删除 所有的 R.java 里定义都是常量值,以 Activity 为例: public class MainActivity extends AppCompatActivity {...文件混淆 通常我们会采用 ProGuard 进行混淆,你会发现混淆也能删除很多 R$*.class,但是混淆会造成一个问题:混淆后不能通过反射来获取资源了。...删除不必要 R 对于 Android 工程来说,通常,library R 只是 application R 一个子集,所以,只要有了全集,子集是可以通通删掉,而且,application...包含反射属性R是不能进行删除,不然就会获取不到 因此,采用了解析 xml 方式,从 xml 中提取以上属性

    94311

    Python抽象魔法--类

    继承:即一个派生类(derived class)继承基类(base class字段和方法。继承也允许把一个派生类对象作为一个基类对象对待。...类好处 在面向对象编程中,术语对象大致意味着一系列数据(属性)以及一套访问和操作这些数据方法。那为什么我们要使用对象而不是使用全局变量和函数呢?其中一个很重要原因就是多态。...如果一个对象为另一个子集,前者就是后者子类,后者是前者超类。 例如,如果你在窗外看到一只鸟,这只鸟就是“鸟类”一个实例。...鸟类是一个非常通用(抽象)类,它有多个子类:你看到那只鸟可能属于子类“云雀”。你可将“鸟类”视为由所有鸟组成集合,而“云雀”是其一个子集。...,而不是将父类中方法进行覆盖,这时python中super()方法提供了这样一个方法。

    38310

    机器学习模型特征选择第一部分:启发式搜索

    特征选择能够改善你机器学习模型。在这个系列中,我简单介绍你需要了解特征选择全部内容。本文为第一部分,我将讨论为什么特征选择很重要,以及为什么它实际上是一个非常难以解决问题。...我们应该总是努力使我们模型更容易工作。聚焦于那些噪声信号特征,我们将有一个更具鲁棒性模型。 为什么这是一个难题? 我们从一个例子开始。...我们能否在一个训练好模型上准确的确定10个属性子集呢? 我们可以将10个属性子集描述为位向量,即10个二进制数字向量。其中0表示不使用特定属性,1表示用于该子集属性。...比使用全部10个属性要好,但不如仅使用第一个属性。 ? 我们现在也可以尝试2个属性子集: ? 使用前两个属性效果很好,精度达到70%。我们尝试了所有可能组合,汇总这些子集所有精度: ?...但是,如果我们提高了精度,就保留最好属性,并尝试添加一个。重复此过程,直到我们不再需要改进。 对于我们以上述10个属性为例?我们从10个模型评估中只有一个属性10个子集开始。

    1.8K100

    Java中子类和父类构造函数?

    参考链接: Java中继承和构造函数 这篇文章总结了关于Java构造常见​​问题。  1)为什么创建一个子类对象要也需要调用父类构造函数? ...class Super {     String s;     public Super(){         System.out.println("Super");     } } public class...如果没有,编译器会插入调用父类构造语句。这就是为什么在创建子类对象时父类中构造超函数会被调用。  这里没有创建两个对象,只有一个子对象。...让父类中构造器被调用原因是,如果父类有私有的属性需要在它构造函数中初始化。 ...要解决此问题,只需1)给Super类增加一个super()构造函数,像这样:   public Super(){     System.out.println("Super"); } 或2)删除自定义父类构造函数

    2.2K20

    基于ABP落地领域驱动设计-02.聚合和聚合根最佳实践和原则

    我们对聚合根和子集合实体都使用实体这个术语,除非明确写出聚合根或子集合实体。 聚合和聚合根原则 包含业务原则 实体负责实现与其自身属性相关业务规则。 聚合根还负责其子集合实体状态管理。...对于习惯使用 EF Core 和 关系数据开发者来说,这看起来似乎有些奇怪。获取 Issue 所有数据是没有必要且低效为什么我们不直接执行一个SQL插入命令到数据库,而不查询任何数据呢?...所以,只有当应用程序代码中相关对象可用时,即获取到聚合及其所有子集合数据时,我们才能执行该业务规则。 另一方面,MongoDB开发者会发现这个规则非常自然。...这并不意味着子集合实体应该总是有复合主键,只有当需要时设置;通常是单一ID属性。 复合主键实际上是关系型数据库一个概念,因为子集合实体有自己表,需要一个主键。...一个设计良好构造函数,担负以下职责: 获取所需实体属性参数,来创建一个有效实体。应该强制只传递必要参数,并可以将非必要属性作为可选参数。 检查参数有效性。 初始化子集合。

    3.1K30

    Java基础入门笔记05——面向对象,创建对象内存分析,继承,封装,多态,object类,this&&super,方法重写,引用类型强制转换,instanceof,抽象类,内部类,接口,异常。[通

    public class Demo02 { public static void main(String[] args) { } //在一个类中为什么static...(一般都会写两个构造,一个无参,一个有参) ---- 构造器notes: 1.使用new关键字创建对象,该类必须要有构造器 2.构造器用来实例化属性(给属性赋初值) IDEA快捷键 ——alt...---- super关键字 ——-指代父类或父类对象 notes: 当父类属性或方法被private修饰时,不能被继承 (也就是super.属性super.方法()不能调父类私有)...此时子类在写super()去调用父类无参构造就会报错了,所以一般情况:如果重写了父类有参构造,一定要记得加上一个无参构造。...类 super和this不能同时调用 super&&this super代表父类对象引用,this代表本身这个对象 this在没有继承时也能使用,super只有在继承条件下才能使用(在子类中使用) this

    99020

    python 类属性和实例属性、类方法, 静态方法, 实例方法、接口, 协议和抽象基类 (4.2)

    属性和实例属性属性 通过类对象可以直接访问属性 抽象概念固有属性, 要考虑当前抽象概念普适性 # 贴标签不是一个特别好抽象, 原因他没有一个普适性 class Developer:..._Lottery__items) 实例属性 绑定在实例上属性, 只能通过该实例进行访问 实例自有属性 class Developer: programing_language = None..._类名__变量名来访问私有属性 类方法, 静态方法, 实例方法 类方法 仅供类调用方法 通过classmethod装饰器来声明一个类方法 自定义类创建 class Developer: programing_language...return super()....b): return a + b 实例方法 仅供实例调用方法 接口, 协议和抽象基类 接口 对象公开方法子集, 让对象在系统中扮演特定角色. list实现了增删改查接口, 只要有一个接口没有实现那就不属于

    62010
    领券