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

为什么在使用super()时我必须指定自己的类,有没有办法解决它?

在Python中,super()函数用于调用父类的方法。当你在子类中使用super()时,必须指定当前类,以便在调用父类方法时正确地传递参数。

例如,如果你有一个名为MyClass的子类,它继承自ParentClass,你需要在MyClass中使用super()来调用ParentClass的方法。这是一个示例:

代码语言:python
复制
class ParentClass:
    def __init__(self, arg1, arg2):
        self.arg1 = arg1
        self.arg2 = arg2

class MyClass(ParentClass):
    def __init__(self, arg1, arg2, arg3):
        super(MyClass, self).__init__(arg1, arg2)
        self.arg3 = arg3

在这个例子中,MyClass继承自ParentClass,并在__init__方法中使用super()来调用ParentClass__init__方法。

如果你不指定当前类,super()将无法正确地传递参数,从而导致错误。因此,在使用super()时,必须指定当前类。

如果你希望避免在使用super()时指定当前类,可以考虑使用__class__属性。例如:

代码语言:python
复制
class MyClass(ParentClass):
    def __init__(self, arg1, arg2, arg3):
        super(__class__, self).__init__(arg1, arg2)
        self.arg3 = arg3

在这个例子中,__class__属性将自动传递当前类,因此你不需要显式地指定当前类。

总之,在使用super()时必须指定当前类,以便正确地传递参数。如果你希望避免这种情况,可以考虑使用__class__属性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

thriftswift:对swift2thrift-generator-cli IDL生成工具改进

还是有歧义可能,所以无论如何应该在thrift这一层解决这个问题而不是让应用项目来解决有没有解决办法?...手工解决办法 当然有,地球人都知道,手工解决办法很简单在服务方法或定义加上Requiredness.OPTIONAL定义,告诉swift2thrift-generator-cli这个字段是可选。...如果你服务接口很简单只有很少方法,涉及也不多,那么这个办法,可以解决问题。 需要自动化解决办法 但是如果服务接口如果非常庞大,涉及也很多,手工维护这些属性标记就是个灾难。...很不幸,遇到就是这种情况,服务接口中有超过100个方法,还在增加中,涉及有十几个,加起来有上百个字段。。。有int,也有Integer(有的必须给值,有的可以为null)。...Requiredness thrift IDL规范中每个field都可以指定必要性(requiredness),可以为optional(可选),required(必须),default(默认)。

1.3K20

Jetpack新成员,App Startup一篇就懂

,填写什么值都是可以,但必须保证这个值整个手机上是唯一,所以通常会使用${applicationId}作为前缀,以防止和其他应用程序冲突。...有没有办法解决这个问题呢? 有,就是使用我们今天要介绍主题:App Startup。...上面花了很长篇幅来介绍App Startup具体是用来解决什么问题,因为这部分内容才是App Startup库核心,只有了解了它是用来解决什么问题,才能快速掌握用法。...,只有meta-data中android:name部分我们需要指定成我们自定义Initializer全路径名,其他部分都是不能修改,否则App Startup库可能会无法正常工作。...这样,LitePal库自己AndroidManifest.xml中配置Initializer也会被删除,既然删除了,App Startup启动时候肯定就无法初始化了。

76320

Swift 构造器使用

构造器 init 好了然后, 谈一下在这两天中写 Swift 遇到最大问题 —- 构造器 init 使用....最后一个常见错误大概是这样 复制代码 Property 'self.label' not initialized at super.init call Orz, 到这里已经放弃了自己通过尝试来解决这些问题了...每个应该只有少量指定构造器, 大多数只有一个指定构造器, 我们使用 Swift 做 iOS 开发就会用到很多 UIKit 框架指定构造器, 比如说: Swift 复制代码 init()init...: nil)} 这是第一个解决办法, 不过一般使用另一种, 属性定义时候就为他说初始化一个值....便利构造器最后必须调用一个指定构造器. 属性相关 指定构造器必须要确保所有被中提到属性代理向上调用父指定构造器前被初始化, 之后才能将其它构造任务代理给父构造器.

1.7K20

kotlin入门之泛型

对于前者,显然我们要添加TextView是不可以 实际情况是编译器无法确定到底属于那一种。无法继续执行下去,就报错了。 你可能在想那么为什么使用通配符?呢? 其实,List<?...表示List泛型类型是一个未知类型 super限制了这个未知类型下界,也就是这个泛型类型必须满足这个super 限制条件 super我们方法里面经常用到,这里范围不仅包括Button...表示未知类型,编译器是不确定类型。 虽然不知道具体类型,不过 Java 里任何对象都是 Object 子类,所以这里能把赋值给 Object。... 存在协变点泛型参数必须声明为协变或者不变 当泛型作为泛型参数实例生产者用协变 in //垃圾 open class Waste //干垃圾 class DryWaste :...>兼容Producer 存在逆变点泛型参数必须声明为协变或者不变 当泛型作为泛型参数实例消费者用协变 *号 *号 前面讲到了 Java 中单个?

1.1K20

聊聊java中多继承,解决Java8接口default方法多继承冲突问题【享学Java】

另外C++使用过程中其实门槛是比较高,其中一个重要原因就是多继承设计,让使用者(特别特别是新手)会经常掉入这个陷阱,即使它也提出了相应解决办法。...为何Java继承(实现)多个接口没有问题呢? 其实关于这一点,个人认为Java语言使用层面上已经做得很友好了。...此方案用到了一个基础知识点:内部类可以继承一个与外部类无关,保证了内部类独立性,从而达到高内聚编码规范 说明:其实有多种方式都能实现类似的效果,本文介绍认为是使用更接近多继承思维来解决问题...若最终还是无法判断,那么实现必须通过显示复写方式复写默认方法,然后再自己通过xxx.super.xxx()方式来指定具体使用哪个接口实现 总之,Java8语言层面上,对若出现接口default...其实不作为也是一种作为,让编译器去提示调用者必须显示override这个冲突方法,让coder自己去决定调用逻辑~ 总结 写这篇文章原因是自己写default方法时候出现了冲突,从而决定多

2.3K20

有序hashmap_treemap是有序

这个问题很多人都遇到过,很常见一个方案是使用LinkedHashMap,因为LinkedHashMap可以记住元素放入顺序,可以认为是真正“有序”(想让HashMap有序是不可能),比较喜欢。...已经测试过String类型是可以直接使用这个接口,如果你list中元素是自定义,那么就要自己实现Comparable,自己编写比较器了。...),ibatis对数据填充到底是怎么弄也不清楚,所以才只能在内存中排序,也不失是一种办法,同时抛砖引玉,看看有没有大侠给说说有没有其他办法。...为什么HashMap继承了AbstractMap还要实现Map? 前言 之前看源码一直忽略了这个现象,按理说HashMapAbstractMap已经实现了Map,它为什么还要实现一次呢...… Windows下文件或文件夹不能删除解决办法 windows删除文件或文件夹,提示文件或文件夹被占用而无法删除 解决办法:win7: winxp:需要借助第三方工具Unlocker.360

59430

搞明白 Java 通配符泛型

但是,既要泛型,又想把这两个类型子类或者父泛型传进去,可不可以呢,是可以,就是使用通配符泛型。...List 转成 Number List Collections.copy(new ArrayList(),new ArrayList()); 这里不知道你有没有疑问,为什么既用 super 又用...super T> ,既可以解决歧义,同时又避免函数内部取返回值强转到 Object 。 public static void copy(List dest, List ,因为 T 总是可以被输入参数确定,而和上面的不同是,这个即使显式指定,也无法修改返回值,所以除了副作用没别的作用,所以我还是坚持看法。...总结 虽然说上面的例子看起来比较难懂,但是说实话,我们平常开发中,通配符泛型并没有经常用到,我们只需要调用库时候看懂库参数是什么意思就好。 简单再分析下两个通配符泛型使用场景: <?

50320

JavaScript高级(1) 面向对象 (多图)

ES6中新增了概念,可以使用class关键字声明一个,之后以这个来实例化对象. 抽象了对象公共部分,泛指某一大 对象特指某一个,通过实例化一个具体对象....继承中,如果子类里面没有,就去查找父有没有这个方法,如果有,就执行父这个方法(就近原则) 改成这样即可: 现在我们写一个子类,继承父加法运算,同时有自己减法运算方法: 但是这样会报错:...在这里要注意,利用super调用父构造函数,super必须在子类this之前调用!!!...应修改为: 这样就没问题了 注意: ES6中没有变量提升,所以必须先定义,才能通过实例化对象 里面的共有的属性和方法一定要加this使用. constructor里面的this...constructor()方法中,this指向是我们new出来实例化对象 顺便解决了前面的问题,为什么打印出来uname是undefined:因为this指向是button,button

29910

详解 Java 泛型

其二,声明和使用泛型和方法中, class 文件层面,需要有一个额外表结构来记录存在泛型参数和方法签名,这个表名为 Signature,是虚拟机规范定义 class 文件中、方法、字段可能存在...抱歉,编译器不会这么做,除非在 “实在没有办法情况,例: Object obj = list1.get(0); 为什么把调用 list1 get 方法叫 “实在没有办法情况呢?...因为代码里面调用了 list1.get(0),这个方法是有返回值,编译器必须给返回值给你,否则违反了 Java 基本语法。...list.add(new Object()); 因为我们定义 list 指定泛型参数类型为:List list,即为 A 或者 A 类型。...此时就需要看有没有配合 super 或者 extends 关键字使用了。

85220

【小家Java】Java优先队列PriorityQueue、PriorityBlockingQueue使用示例

而正常排队都属于普通队列~ PriorityQueue PriorityQueueJava1.5中引入,它是Java集合框架一部分。...PriorityQueue是基于优先堆一个无界队列,它是一个Queue 默认情况下 根据自然排序,当然我们也可以定制比较器,自行自定义排序,从而实现自己优先级逻辑。...super E> comparator) { this(DEFAULT_INITIAL_CAPACITY, comparator); } // 自己指定初始化因子,指定比较器...…) 本文重点不介绍阻塞特性,而是介绍优先级队列使用办法。...:没有提供和PriorityQueue一样只提供比较器构造函数,个人觉得是JDK忘了~~~~ PriorityBlockingQueue priorityQueue

1.7K40

人生靠反省,Java靠泛型

昨天有同事问 UserService、XxxService 都会调用 Dao insert、update ... ...,这些重复代码,有没有办法变得灵活一些?...(身边同事还真问过这个问题,在这还是再认真的回答一次) 其实我们可以使用任何合法 Java 标识字符串,但是大家用单一字母来表示,已经成为一种习惯,而 E 又代表 Element 元素意思,所以集合中经常用...但是你实际开发中,有没有遇到过上图情形,进行狗狗列表排序时,就死活报错!报错!!原因就是因为要排序狗狗,必须要实现 Comparable,方能进行排序。...super T> 则代表 Comparable 类型参数必须是 T 或 T 父类型。 提到 ,那不得不再提一提 <?...其实泛型是编译期一种检查,能够有效防止狗入人海,其中主要分为使用泛型以及使用泛型方法;其中 E 主要用于集合元素,除了 E 之外绝大部分是 T,然后 Java 还引入了一种万用字符是问号,不过可以用任意

46110

Swift-Runtime总结

先说说这个Runtime,自己之前文章中有总结过关于OCRuntime以及API一些基本方法和在项目中具体使用,在这里再大概提一下Runtime基本概念:       RunTime...Swift 纯Swift函数调用已经不是OC运行时发送消息,和C类似,在编译阶段就确定了调用哪一个函数,所以纯Swift我们是没办法通过运行时去获取到属性和方法。      ...Swift 对于继承自OC,为了兼容OC,凡是继承与OC都是保留了特性,所以可以使用Runtime获取到属性和方法等等其他我们OC中获得东西。      ...,必须使用 dynamic 标识符修饰,当然添加了 dynamic 时候,它会自己加上@objc这个标识符。      ...可以看到自己定义方法前面加了时间判断,最后还是调用了方法本身!这样就有了一个问题。你用自己方法代替了系统方法,加入了自己一些东西,最有没有再去调用系统方法?

78030

【Java提高二】三大特性-继承

同时使用继承需要记住三句话: 1、子类拥有父非private属性和方法。 2、子类可以拥有自己属性和方法,即子类可以对父进行扩展。...如果父没有默认构造器,我们就要必须显示使用super()来调用父构造器,否则编译器会报错:无法找到符合父形式构造器。 ?...所以综上所述:对于继承而已,子类会默认调用父构造器,但是如果没有默认构造器,子类必须要显示指定构造器,而且必须子类构造器中做第一件事(第一行代码)。...这就是为什么编译器“未曾明确表示转型”活“未曾指定特殊标记”情况下,仍然允许向上转型原因。 谨慎继承 上面讲了继承所带来诸多好处,那我们是不是就可以大肆地使用继承呢?...所以说当我们使用继承时候,我们需要确信使用继承确实是有效可行办法。那么到底要不要使用继承呢?《Think in java》中提供了解决办法:问一问自己是否需要从子类向父进行向上转型。

59190

Swift Runtime ?

先说说这个Runtime,自己之前文章中有总结过关于OCRuntime以及API一些基本方法和在项目中具体使用,在这里再大概提一下Runtime基本概念:       RunTime...Swift 纯Swift函数调用已经不是OC运行时发送消息,和C类似,在编译阶段就确定了调用哪一个函数,所以纯Swift我们是没办法通过运行时去获取到属性和方法。      ...Swift 对于继承自OC,为了兼容OC,凡是继承与OC都是保留了特性,所以可以使用Runtime获取到属性和方法等等其他我们OC中获得东西。      ...,必须使用 dynamic 标识符修饰,当然添加了 dynamic 时候,它会自己加上@objc这个标识符。      ...可以看到自己定义方法前面加了时间判断,最后还是调用了方法本身!这样就有了一个问题。你用自己方法代替了系统方法,加入了自己一些东西,最有没有再去调用系统方法?

4.9K71

从EFCore上下文使用到深入剖析DI生命周期最后实现自动属性注入

使用EF的话不可避免要和DbContext打交道,Core中常规用法一般是:创建一个XXXContext继承自DbContext,实现一个拥有DbContextOptions参数构造器,启动...如果要手动new一个上下文,那岂不是每次都要自己传?不行,这太痛苦了。那有没有办法不传这个参数?肯定也是有的。...由此可知,除非是root provider中获取一个单例服务,否则必须指定一个服务范围(Scope),这个验证是通过ServiceProviderOptionsValidateScopes来控制...官方明确表示没有开发属性注入计划,没办法,只能靠自己了。...于是想有没有办法控制器被激活时候做一些操作?没考虑引入AOP框架,感觉为了这一个功能引入AOP有点重。

1.2K20

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

关键字 supersuper 理解:父 Java 使用 super 来调用父指定操作: super 可用于访问父中定义属性 super 可用于调用父中定义成员方法...,this 代表本类对象引用,super 代表父内存空间标识 4.1 为什么需要 super? ‍...4.3 super 调用构造器 ‍ ① 子类继承父,不会继承父构造器。只能通过“super(形参列表)”方式调用父指定构造器。...② 规定:“super(形参列表)”,必须声明构造器首行。...结构,表示调用父属性或方法。 一般情况下,我们可以考虑省略"super."结构。但是,如果出现子类重写了父方法或子父中出现了同名属性, 则必须使用"super."

12910

super关键字和继承中潜规则

相似 1.没有重名时候,都会隐身,当有重名时候必须现身。参数与成员变量重名,使用this,父成员变量与子类成员变量重名,使用super。 1 2.他们都可以调用构造器。...子类构造,会调用父构造器,使用super指定调用哪一个父构造器,如果不使用则默认调用父无参构造器。...还有种情况是我们不希望子类重写父。比如我们普通玩家打怪时候,一不小心怪没打死,自己挂了。这时候会有系统惩罚,比如掉经验掉金币,就算用户是VIP,也不希望他们改变这个机制,为什么?...学了super,我们知道super可以调用父属性和方法,假如我们可以定义多个直接父,那么我们super调用时候就不知道到底调用哪个直接父了。 只能有一个直接父 有没有理解更深点?...有了,你一生下来,就具有了一部分方法,可以直接使用,具体我会在讲解java包结构时候为大家具体介绍,这里先混个眼熟。

48730

super(props) 真的那么重要吗?

但是假如你想更深入了解运作方式,就会发现实际上它们很有趣。 开始第一个。 ---- 首先在职业生涯中写过 super(props) 自己都记不清: ?...不过还是让我们回到上面这个例子,这次只使用ES2015特性: ? 为什么我们要调用super? 可以调用它吗? 如果必须要调用,不传递prop参数会发生什么? 还有其他参数吗?...接下来我们试一试: ---- JavaScript 中,super 指的是父构造函数。(我们示例中,指向React.Component实现。)...如你所见,像这样代码很难想到问题出在哪里。 为了避免这类陷阱,JavaScript 强制要求:如果想在构造函数中使用this,你必须首先调用super。 先让父做完自己事!...当 React 添加对支持,它不仅仅增加了对 ES6 支持。目标是尽可能广泛支持抽象。

1.3K50

Java原来还可以这么学:如何搞定面试中必考集合

有没有发现,Java面试中总是爱考一问题,那就是集合为什么对集合考察会如此受欢迎呢,其实啊,主要是因为集合使用范围实在是太广了,不管是开发中,还是框架源码中,往往都会用到集合。...为什么面试官总是喜欢问集合呢,依我看来,有这么几个原因:集合里是Java里使用范围最广,使用频率最高api了,并且这玩意通用性很强,很多框架都得使用,如果想要看懂框架源码,那么你就必须要掌握集合知识...实际上,要想真正了解hashmap数据结构和实现原理,最好办法就是去看源码,有的小伙伴肯定会眉头一皱,源码这么复杂,看不懂怎么办,没关系,自己看不懂,还可以让别人教你呀,网上有很多源码解析博客,自己也整理了不少...为什么要看源码呢,比如hashmap,定义里就已经展示了数据结构,我们可以从中看出它是一个数组加链表数据结构,这些成员变量都是hashmap这个里定义好,并且,再看看put和get...有些事,你必须要经历过,才能明白,有些坑,你不用自己去踩,因为已经踩过了

57600

【Android】TextView跑马灯效果

其实这是因为跑马灯启动有多个条件,也就是上面的属性除了最后一条设置循环次数除外,其他必须进行设置。...2.png 至于为什么用maxLines="1"替代singleLine="true", 跑马灯不会正常工作原因,在下一篇博客里有解析,感兴趣可以看看。...扩展 其实,跑马灯更常见于TV应用上,因为只有TV应用上才需要区分获取焦点状态以及点击状态,毕竟TV应用都不支持触屏模式,都是有遥控操作,焦点状态提示就显得很重要。...而对于触屏手机来说,当触摸,也就同时获取点击状态和焦点状态了,所以触屏手机上,跑马灯更常见应用场景则是,不管TextView有没有获取焦点,都让跑马灯效果一直处于启动状态,正如最上面动图里第一个...(isMarqueeEnable); } } 最后 以上就是使用TextView跑马灯记录,那么,如果不用官方提供有没有办法实现呢,答案肯定是有的,怎么做呢,不知道,最近正好没事,自己试试看去

4.9K60

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券