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

在__init__中设置对象的父类

1、问题背景在Python中,可以为对象设置一个父类,从而实现继承。但是,如果想要在实例化对象时动态地指定父类,则会出现问题。...: # 这里,我们设置Bar的父类为`parent`(提取代理IP) # http://jshk.com.cn/mb/reg.asp?...(parent=Blue)blue_square = Square(parent=Blue)但是,这段代码会报错,因为在Python中,对象的父类只能在类定义时指定,不能在实例化对象时动态设置。...然后,它根据parent的值来决定创建哪个类。如果parent是Red,则创建一个Circle类,它的父类是Red。...如果parent是Blue,则创建两个类,Circle和Square,它们的父类都是Blue。最后,它返回创建的类。这样,我们就可以在实例化对象时动态地指定对象的父类了。第二个解决方案是使用依赖注入。

10810

子类继承父类,父类的初始化

《Thinging in Java》的引用 基础类及衍生类,而不再是以前的一个,所以在想象衍生类的结果对象时,可能 会产生一些迷惑。...从外部看,似乎新类拥有与基础类相同的接口,而且可包含一些额外的方法和字段。但继承并非仅仅简单地复制基础类的接口了事。创建衍生类的一个对象时,它在其中包含了基础类的一个“子对象”。...这个子对象就象我们根据基础类本身创建了它的一个对象。从外部看,基础类的子对象已封装到衍生类的对象里了。...个人总结: super关键字必须写在构造方法的方法体内的非注释代码的首行 子类进行初始化,必须调用父类的构造方法,如果父类的所有构造方法都用private修饰了的话,则无法继承,编译报错....衍生类构造方法调用父类的构造方法,如果父类是无参构造方法,那么编译器会为衍生类的构造方法首行加上super()。 编译器会强迫我们在衍生类构建器的主体中首先设置对基础类构建器的调用。

1.9K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    python之类的重写父类方法与调用父类方法

    Python 优雅的语法和动态类型以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的理想语言。下面我们来介绍一下python的类的重写父类方法与调用父类方法。...---- 二、重写父类方法与调用父类方法   在继承关系中,子类会自动继承父类中定义的方法,但如果父类中的方法功能不能满足需求,就可以在子类中重写父类的方法。...即子类中的方法会覆盖父类中同名的方法,这也称为重载。...2.子类调用父类方法   如果需要在子类中调用父类的方法,可以使用内置函数super()或通过“父类名.方法名()”的方式来实现。 例:子类调用父类的方法示例。...__init__(name, sex) #调用父类中的__init__方法 self.score = score #创建对象实例 student = Stu('Jack','Male

    2.7K30

    pythonobject类_java中所有异常类的父类

    Object类 所有类的父类,默认所有的类都继承至Object类 规定了类的结构,加载方式,常用函数 以前的写法: class 类名(Object): pass 现在的写法:...class 类名: pass 如果有父类才编写,如果没有父类可以省掉Object类,但是也是默认继承 内置函数: __new__(cls, *args, **kwargs) 创建对象时自动调用的函数...,主要作用是创建对象,给该对象分配空间,方便之后的的操作 该函数会返回创建出来的对象实体,一旦正常的返回实体后,调用初始化函数 __init__(self) 初始化函数(构造函数),作用:给当前对象创建各类变量...,并给变量赋初值,一般用于对象的初始设置,该函数没有返回值 __str__(self) 对象描述函数,作用:返回当前对象的字符串类型的信息描述,一般用于对象的直接输出显示 __del__(self) 删除该对象时会自动调用...__new__(cls) # 调用父类的创建对象的函数,进行当前对象的创建 def __init__(self, name, age, sex): print

    73120

    子类赋值父类的赋值兼容

    C++ 中,类型的匹配检测是非常严格的,但是你会发现一个现象,如果一个类继承了另外一个类,把子类的对象赋值给父类的时候,系统不但不提示错误,而且程序还能顺利的编译通过并运行。...这其实就是 C++ 内部提供的赋值兼容的过程,但是要注意,如果子类数据成员比父类多,则会出现数据截断。...“; cout << “start (“ << _x << “,” << _y << “)” << endl; } protected: int _x; int _y; }; // 继承 Shape 类...cout << “radio r = “ << _r << endl; } private: int _r; }; int main(int argc, char* argv[]) { // 实例化一个父类对象...Shape s(3, 5); s.draw(); // 实例化一个子类对象 Circle c(1, 2, 4); c.draw(); cout << “————————“ << endl; // 子类对象给父类变量赋值

    19530

    python调用父类方法的三种方式(super调用和父类名调用)

    子类调用父类的方法的三种方式:父类名.方法名(self)super(子类名,self).父类方法名()super().父类方法名注意:super()通过子类调用当前父类的方法,super默认会调用第一个父类的方法...针对这种情况,正确的做法是定义Person类自己的构造方法(等同于重写第一个直接父类的构造方法),但是需要注意的是,在子类中定义构造方法,则必须在该方法中调用父类的构造方法。...未绑定方式使用super()函数,但如果涉及多继承,该函数只能调用第一个直接父类的构造方法。...也就是说,涉及到多继承时,在子类构造函数中,调用第一个父类构造方法的方式有以上两种,而调用其他父类构造方法的方式只能使用未绑定方法。...__init__(self, name)使用未绑定方法调用第一个父类的构造方法 #调用其他父类的构造方法,需要手动给self传值 Animal.

    1.1K20

    java类加载的过程 父_类加载机制原理

    (符号引用是用一组符号描述所引用的目标;直接引用是指向目标的指针) 验证 验证是连接阶段的第一步, 这一阶段的目的是为了确保 Class文件的字节流中包含的信息符合当前虚拟机的要求, 井且不会危害虚拟机自身的安全...) 这个类的父类是否继承了不允许被继承的类(被finaI修饰的类) 如果这个类不是抽象类, 是否实現了其父类或接口之中要求实现的所有方法 类中的字段、 方法是否与父类产生了矛盾(例如覆盖了父类的final...字段, 或者出現不符合规则的方法重载, 例如方法参数都一致, 但返回值类型却不同等) 第二阶段的验证点同样远不止这些,这一阶段的主要目的是对类的元数据信息进行语义检验, 保证不存在不符合 Java语言规范的元数据信息...但接口与类不同的是, 执行接口的()方法不需要先执行父接口的()方法。只有当父接口中定义的变量被使用时, 父接口才会被初始化。...,程序先加载并连接该类; 假如该类的直接父类还没有被初始化,则先初始化其直接父类; 假如类中有初始化语句,则系统依次执行这些初始化语句 当执行第二步时,系统对直接父类的初始化也遵循此1、2、3步骤,如果该直接父类又有直接父类

    71520

    子类继承父类,重写父类的synchronized方法,两个synchronized方法的锁对象的问题

    参考链接: 用子类引用子类对象 vs 父类引用 这是java并发编程实践中有关重入概念的介绍时产生的问题  public class Widget {       public synchronized...System.out.println(toString() + ": calling doSomething");           super.doSomething();       }   }  子类继承父类...,重写父类的synchronized方法,两个synchronized方法的锁对象的问题  是同一个锁还是不同锁呢,是同一个锁的话是  父类对象作为锁还是子类对象作为锁呢? ...但输出的是 something sleepy! woke up!...,至于理解么:  可以认为即便是继承创建了父类对象,并把父类对象的引用交给了子类,但是在super.去调用方法的时候JVM认为调用者依然是子类。

    1.8K20

    高级 Vue 技巧:控制父类的 slot

    在我们的应用程序中,我们有一个顶部栏,其中包含不同的按钮、搜索栏和其他一些控件。根据每个人所在的页面,它可能略有不同,因此我们需要一种基于每个页面配置它的方法。 ?...我们可以使用ActionBar上的一些插槽来配置它。 但是,我们如何从App组件中控制这些插槽? 定义问题 首先,最好是尽可能清楚地知道我们要解决的问题。...在我们的例子中,我们将元素从DOM中的一个位置“传送”到另一个位置。 无论组件树如何显示,我们都可以控制组件在DOM中的显示位置。 例如,假设我们想要填充一个modal。...这里的“状态”是我们试图传递到ActionBar组件插槽中的内容。但是该状态包含在Page组件中,我们不能真正将 page 特定的逻辑移到layout组件中。...对于界面复杂点的,这可能是一项艰巨的任务。 简化一下 当我们第一次定义问题时: 我们可以让子组件填充父组件的插槽吗? 但实际上,这个问题与props没有任何关系。

    1.8K20

    父类返回子类类型的函数写法

    不过由于我们的这个 Event 的类型比较多,因此希望写一个父类,来一个子类感受下: class DisposableEventBuilder : EventBuilder() { private....build() 我们调用完父类的 retryLimit 方法后,想要设置下 delay,结果发现没有这个方法。 “我 X,这什么玩意儿”,你嘟囔了一句。 因为返回的是父类,所以链式调用掉链子了。...this.retryLimit = retryLimit return this as T } abstract fun build(): PollingEvent } 这个泛型给父类加了一个泛型参数...,这个参数则必须是当前类的子类,那么这样的话我们就可以在返回自身类型的位置返回 T 这个类型了。...子类的改动就很简单了,只需要给父类加一个泛型参数为自己的类型即可: class DisposableEventBuilder : EventBuilder

    4.8K10

    【自然框架】 页面里的父类—— (补充)

    没想到下午发的《【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他。 》启发了热烈讨论,还以为又是一大堆的口水回复呢。...有些功能是多个页面共有的、相同的,有些是一类页面有的,那么大家会怎么设计呢?...树状功能节点页面,这类的也就三个,也可以直接继承System.Web.UI.Page,这样继承的层数不就少了吗。或者给这三个页面单独做一个父类。 不过有必要为了减少继承的层数而特意这么做吗?...我觉得继承的一个优点就是可以“被动”执行,就是说不用在子类里面现象的调用函数,而是由父类默默的去做了。...当然这么做也有个缺点,那就是如果不看看父类的代码(或者看说明文档)的话,那么就不知道父类到底做了什么。 欢迎大家继续拍板砖,呵呵,这样的讨论氛围我还是很喜欢的。大家觉得呢?

    84350

    【自然框架】 页面里的父类——把共用的东东都交给父类,让子类专注于其他。

    (类图里面Tree、Main1、DataDelete1、DataForm1、DataList1不是父类,而是共用页面)       这个是依据自然框架的特点来设置的,目的就是把共用的代码都放到父类里面...就是最大限度的避免冗余代码,就是说相同的代码只出现在一处!       如果只设置一个父类,不能满足不同的需求,所以就根据不同的需求,设置了多级的父类。 1、 BasePage 。...因为我自己写的数据访问函数库不是静态函数的,使用前必须先new一下,而每次用的时候都要new比较麻烦,所以就放在父类里面了。 2、 PagePermission。 ...在OnInit里面首先验证DataID,再调用父类函数验证是否有权限访问,再验证是否可以访问指定的记录(DataID)。...总结:URL参数的验证、权限的验证、访问记录的验证、控件属性赋值等,都交给父类去做,子类就可以不用去考虑权限的问题,专心致志的处理好自己的业务逻辑了。

    79991

    Python类中__init__()的作用

    最开始学习python,认为定义类时__init__方法的作用等同于C中的构造函数,但是使用之后发现也有区别。...__init__(a,"wang")即__init__的作用是初始化实例后的对象b在子类不重写__init__方法时,子类会默认调用父类中的__init__方法子类也可以重写__init__方法,来给子类定义专属属性当然...,上面写的是比较官方的解释用简单的话来讲,可以理解为,类的属性如果直接写在类里面一般是要有值的。...例如:class fun() a = 3这样的情况下,类中的属性无法变成变量,当将类的属性以self.a的方式定义到初始化方法中,那属性也可以当成变量例如:class fun(): def _..._init__(self, a): self.a = af = fun(3)print(f.a)Output:--3--

    2.5K10

    Java中类的加载机制---父类和子类的多态调用

    null 1) 上面程序最大的难点,也是最重要的地方就是:在父类的构造函数中调用了虚函数,并且这个函数被子类重载了 2) 继承的时候,子类与父类有着同名的属性和同名的方法,关于同名的属性的初始化过程也是必须要了解的...Java 中子类加载的机制是第三个需要理解的地方: 1)相关的类的加载机制还是跟  上面第二点相似,只是在子类初始化的时候必须先去初始化父类 2)只有 等Java机制给子类和所有的父类都分配了内存空间之后...,主要是属性 baseName ,地址变量指向null, 2)接下来执行Sub的构造函数,首先是执行super()函数,把父类搞出来, 3)进入父类的实例化,首先需要去在堆内存里面给父类分配内存空间,为父类的...baseName分配地址,地址变量指向null; 4)由于父类不需要再也没有超类了,那么这个时候父类和子类的内存分配都做完了,接下来就是需要为  属性进行初始化的工作 5)首先是给父类的baseName...执行初始化操作,在栈内存里面写上内容base,上面的为父类分配的地址变量  指向  这个栈内存 6)接下来是做父类的构造函数,完成父类的实例化,构造函数里面的代码是执行了一个虚函数,这个时候首先要看子类有没有重载这个函数

    2.8K40

    Lucene中AttributeSource作为TokenStream父类的原因

    , TypeAttribute,从他们的命名上可以看出其与lucene项的属性有关联,其实上述接口的确与项的属性有一一对应的关系,这些接口定义了对项的特定属性的规范操作,但仅仅定义了操作的行为,具体的属性的数据却在在...AttributeImpl的派生类中定义。...1.1.3 综上,我们有结论如下,Token有若干的属性,对每个属性其表达由Attribute和AttributeImpl完成,Attribute定义对该属性的操作,AttributeImpl实现该接口并包含具体的属性数据...AttributeImpl.Class创建AttributeImpl的类实例,并返回,如果不存在这样的映射关系,那么AttributeFactory将使用下述的方法添加这种映射并创建类实例返回。...Lucene中AttributeSource作为TokenStream父类的原因的 2.1 TokenStream的作用是从给入的文本中不断解析出Token,具体的做法是TokenStream有方法incrementToken

    56710
    领券