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

python中子类调用初始化方法

子类不显式调用的构造方法,而构造函数初始化了一些属性,就会出现问题 如果子类和都有构造函数,子类其实是重写了的构造函数,如果不显式调用构造函数,的构造函数就不会被执行,导致子类实例访问初始化方法初始的变量就会出现问题...构造函数被重写,但新的构造方法没有任何关于初始化的namea属性的代码,为了达到预期的效果,子类的构造方法必须调用其父的构造方法来进行基本的初始化。...这种方法叫做调用的未绑定的构造方法。在调用一个实例的方法,该方法的self参数会被自动绑定到实例上(称为绑定方法)。但如果直接调用方法(比如A.__init),那么就没有实例会被绑定。...二、第二种解释     在Python中子类继承的过程,如果子类不覆盖的__init__()方法,则子类默认将执行与一样的初始化方法。...但是假如子类自己重写 了(也成为覆盖)的__init__()方法,那么就需要显式的调用初始化方法了。有两种方法可以做到:      1:ParentClass.

2.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

创建子类对象构造函数调用被子类重写的方法为什么调用的是子类的方法

void main(String[] args) { A a = new A(); B b = new B(); } } 问题:为什么创建A对象的时候调用子类方法...但是:创建B对象调用方法? 答案: 当子类被加载到内存方法区后,会继续加载到内存。...如果,子类重写了方法,子类的方法引用会指向子类的方法,否则子类的方法引用会指向方法引用。 如果子类重载了方法,则子类重载方法引用还指向子类方法。...如果子类方法没有重写也没有重载方法,则方法引用会指向方法。 当子类对象创建,会先行调用的构造方法(构造方法也是方法),虚拟机会在子类方法区寻找该方法并运行。...其结果是当编译的时候,构造方法调用方法的参数已经强制转换为符合方法的参数了。 上边代码在编译前已经转换为下面这个样子的了。

6.1K10

Python 在子类调用方法详解(单继承、多层继承、多重继承)

测试环境: win7 64位 Python版本:Python 3.3.5 代码实践: 1、在子类通过“名”调用方法 class FatherA: def __init__(self)...__init__(self) # 在子类调用方法名.方法名称(参数) if __name__ == '__main__': b = SubClassB() 运行结果: >>> ==...(如SubClassB的由FatherA变为FatherD),必须遍历整个定义,把子类中所有的名全部替换过来 2、在子类通过“super”方法调用方法 场景1、单层继承 class...__init__() # 在子类调用方法:super().方法名称(参数) if __name__ == '__main__': b = SubClassB() class FatherA...,以super().method(参数)方法调用方法,如果不同父存在同名方法method(不管参数列表是否相同),则按继承顺序,选择第一个方法

3K30

ASP.NET AJAX(6)__Microsoft AJAX Library的面向对象类型系统命名空间——构造函数——定义方法——定义属性——注册——抽象——继承——调用

_mymethod=function{throw Error.notImplemented();}}//包含抽象方法 ——继承 调用的构造函数 有必须调用的构造函数,否则会丢失继承效果...可以直接以普通方式实现的抽象成员 toString方法无法被继承 ——调用方法 MyNamespace.MyClass.prototype={myMethod:function(param1...function() { var description = MyNamespace.Intern.callBaseMethod(this, "getDescription");//调用方法...接口 与的定义方法大致相同 构造函数抛出异常 所有的方法抛出异常(只有方法签名,不提供实现) 注册接口使用registerInterface方法 接口无法继承其他接口 接口定义 MyNamespace.IMyInterface...//得到名 Type.prototype.implementsInterface//得到是否实现某接口 Type.prototype.inheritsFrom//确定一个类型是否特定的类型继承 Type.prototype.isImplementedBy

6.2K50

异常1.异常简介2.捕获异常3.异常的传递4.抛出自定义的异常5.异常处理抛出异常

·把可能出现问题的代码,放在try ·把处理异常的代码,放在except 2.python异常处理 BaseException            所有异常的 SystemExit                  ...迭代器没有更多的 GeneratorExit               生成器(generator)发生异常来通知退出 StandardError               所有的内建标准异常的...Weak reference)试图访问已经垃圾回收了的对象 RuntimeError                     一般的运行时错误 NotImplementedError         尚未实现的方法...__init__()的说明 这一行代码,可以调用也可以不调用,建议调用,因为__init__方法往往是用来对创建完的对象进行初始化工作,如果在子类重写了的__init__方法,即意味着的很多初始化工作没有做...,这样就不保证程序的稳定了,所以在以后的开发,如果重写了的__init__方法,最好是先调用的这个方法,然后再添加自己的功能 5.异常处理抛出异常 ?

1.8K30

java加载常见的几种问题理解加载机制

初始化的静态成员变量和静态代码块; 2. 初始化子类的静态成员变量和静态代码块; 3. 初始化的普通成员变量和普通代码块,再执行的构造方法; 4....main方法 以上代码在new SubClass();之前完成,当实例化一个对象–变量 初始化–构造器 i=9, j=0 子类–变量 子类–初始化块...(4)SubClass存在,则调用的构造函数,你可以使用super来指定调用哪个构造函数(也就是Beetle()构造函数所做的第一件事)。 的构造过程以及构造顺序,同派生的相同。...*的方法进行反射调用的时候,如果类还没有进行过初始化,马上对其进行。 3.初始化某个的子类,当初始化某个的子类,该类的所有都会被初始化。...这要从java的加载时机说起。 2 的加载时机 被加载到虚拟机内存开始,直到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。

41230

C++编程经验(4):不要在构造函数和析构函数中使用虚函数

---- 构造函数调用虚函数 首先构造函数不能调用虚函数,不是说语法不允许,最重要的原因在于,当有继承的时候,调用到子类的函数,但是此时子类并没有初始化,会导致数据错误,就这一点足已让你不能在构造函数调用虚函数...在的构造过程,虚函数调用从不会被传递到派生。代之的是,派生对象表现出来的行为好象其本身就是类型。不规范地说,在的构造过程,虚函数并没有被"构造"。...如果在的构造过程对虚函数的调用传递到了派生, 派生对象当然可以参照引用局部的数据成员,但是这些数据成员其时尚未初始化。这将会导致无休止的未定义行为和彻夜的代码调试。...沿层次往下调用尚未初始化的对象的某些部分本来就是危险的,所以C++干脆不让你这样做。...---- 析构函数调用虚函数 在对象的析构期间,存在与上面同样的逻辑。一旦一个派生的析构器运行起来,该对象的派生数据成员就被假设为是未定义的,这样以来,C++就把它们当做是不存在一样。

1.1K30

C++ 使用规范建议

构造函数(Constructor)的职责 构造函数只进行那些没有实际意义的(trivial,译者注:简单初始化对于程序执行没有实际的逻辑意义,因为成员变量的“有意义”的大多不在构造函数确定)初始化...(4)如果有人创建该类型的全局变量,构造函数将在main()之前被调用,有可能破坏构造函数暗含的假设条件。例如,gflags尚未初始化。...定义:新建一个没有参数的对象,默认构造函数被调用,当调用new[](为数组),默认构造函数总是被调用。 优点:默认将结构体初始化为“不可能的”,使调试更加容易。...定义:当子类继承,子类包含了所有数据及操作的定义。...C++实践,继承主要用于两种场合:实现继承(implementation inheritance),子类继承的实现代码;接口继承(interface inheritance),子类仅继承方法名称

1.8K20

(17) 继承实现的基本原理 计算机程序的思维逻辑

一个的信息主要包括以下部分: 变量(静态变量) 初始化代码 方法(静态方法) 实例变量 实例初始化代码 实例方法 信息引用 初始化代码包括: 定义静态变量的赋值语句 静态初始化代码块...实例初始化代码包括: 定义实例变量的赋值语句 实例初始化代码块 构造方法 加载过程包括: 分配内存保存的信息 给变量赋默认 加载 设置父子关系 执行初始化代码 需要说明的是,关于初始化代码...,是先执行的,再执行子类的,不过,执行时,子类静态变量的也是有的,是默认。...方法调用 我们先来看c.action();这句代码的执行过程是: 查看c的对象类型,找到Child类型,在Child类型找action方法,发现没有,到寻找 在Base中找到了方法action...()方法,执行完后返回action方法 继续执行action方法,输出end 寻找要执行的实例方法的时候,是对象的实际类型信息开始查找的,找不到的时候,再查找类型信息。

56860

Python3 常见错误和异常处理

Python3常见错误 异常名称 描述 解决方法 BaseException 所有异常的 Python所有的错误都是BaseException派生的,是所有异常的 SystemExit 解释器请求退出...StopIteration 迭代器没有更多的 \ GeneratorExit 生成器(generator)发生异常来通知退出 \ StandardError 所有的内建标准异常的 \ ArithmeticError.../对象失败 无法导入一个模块或者模块的一个成员时会产生该异常 LookupError 无效数据查询的 \ IndexError 序列没有此索引(index) 如果索引超出范围,就会产生IndexError...一般的运行时错误 如果没有其他更特定的异常可用,就要使用RuntimeError异常 NotImplementedError 尚未实现的方法 用户自定义的可能产生NotImplementedError...\ UnicodeEncodeError Unicode 编码错误 \ UnicodeTranslateError Unicode 转换错误 \ Warning 警告的 \ DeprecationWarning

1.5K20

Java 继承、多态与的复用

如果两个存在继承关系,则子类会自动继承方法和变量,在子类可以直接调用方法和变量。需要指出的是,在java,只允许单继承,也就是说,一个最多只能显式地继承于一个。...因此,对子对象的正确初始化是至关重要的,并且Java也提供了相应的方法来保证这一点: 导出必须在构造器调用构造器来执行初始化,而构造器具有执行初始化所需的所有知识和能力。...---- 1、实现机制   我们知道方法的覆盖很好的体现了多态,但是当使用一个引用去调用一个覆盖方法,到底该调用哪个方法才正确呢? 将一个方法调用同一个方法主体关联起来被称作绑定。...子类对象使用这个方法,将调用方法在子类的定义,对它而言,方法的定义被屏蔽了。 总的来说,重载和覆盖是Java多态性的不同表现。...隐藏:指运行时系统调用当前对象引用 编译类型 定义的方法,即 被声明或者转换为什么类型就调用对应类型方法或变量,属于编译期绑定。

70320

python基础六

注意:我们导入模块,会现在本地文件查找该模块,再去系统变量查找也就是说如果我们将本地py文件的命名修改成上篇文章的任意一个,再去使用它就会报错。 如果我想要调用Test的Getstr方法呢?...:用户中断执行(通常是输入^C) Exception:常规错误的 StopIteration:迭代器没有更多的 GeneratorExit:生成器(generator)发生异常来通知退出 SystemExit...提高代码的精简度,把公共的部分写在,子类继承即可。...我们把Father,Mother叫或超 Son,Daughter叫做子类或派生 查看该类的:__base__ 例如查看Son的: print(Son....__base__) # 所有没有继承的继承object 当我们想要的子类中有和想相同的方法既要调用自己的方法,也要执行方法需要用到super 实例: class Father: def

60230

Qt中使用继承信号槽定义原则

在Qt代码,当使用继承来创建新的,信号与槽的使用需要注意以下几点: 1. 的信号与槽 当一个继承自另一个,它继承了的所有信号与槽。...可以通过声明signals和slots关键字在头文件定义信号与槽函数。 3. 使用槽函数处理信号 在中使用槽函数处理信号,需要确保槽函数的定义与信号参数和返回一致。...调用构造函数 在派生的构造函数,确保调用的构造函数,如 : QObject(parent)。 9....析构函数 如果你的使用了动态分配的资源或者需要特别的清理逻辑,确保定义并实现析构函数。 10. 不要在构造函数连接信号 构造函数不应该连接信号到槽,因为对象在构造过程尚未完全初始化。 11....检查的实现 在重写的信号和槽,确保你了解的实现细节。

15110

Google C++编程风格指南(四)之类的相关规范

构造函数(Constructor)的职责 构造函数只进行那些没有实际意义的(trivial,译者注:简单初始化对于程序执行没有实际的逻辑意义,因为成员变量的“有意义”的大多不在构造函数确定)初始化...4) 如果有人创建该类型的全局变量(虽然违背了上节提到的规则),构造函数将在main()之前被调用,有可能破坏构造函数暗含的假设条件。例如,gflags尚未初始化。...定义:新建一个没有参数的对象,默认构造函数被调用,当调用new[](为数组),默认构造函数总是被调用。 优点:默认将结构体初始化为“不可能的”,使调试更加容易。...定义:当子类继承,子类包含了所有数据及操作的定义。...C++实践,继承主要用于两种场合:实现继承(implementation inheritance),子类继承的实现代码;接口继承(interface inheritance),子类仅继承方法名称

83921

Google C++ 编程风格指南(三):

如果有人创建该类型的全局变量 (虽然违背了上节提到的规则), 构造函数将先 main() 一步被调用, 有可能破坏构造函数暗含的假设条件. 例如, gflags 尚未初始化....若未声明构造函数, 则编译器会生成一个默认的构造函数, 这有可能导致某些成员未被初始化或被初始化为不恰当的. 定义: new 一个不带参数的对象, 会调用这个的默认构造函数....定义: 当子类继承, 子类包含了所有数据及操作的定义....C++ 实践, 继承主要用于两种场合: 实现继承 (implementation inheritance), 子类继承的实现代码; 接口继承 (interface inheritance), 子类仅继承方法名称...在没有实现 API 某个必须的方法, 编译器同样会发现并报告错误. 缺点: 对于实现继承, 由于子类的实现代码散布在和子类间之间, 要理解其实现变得更加困难.

79240

C#基础知识系列七(base、this、new、override、abstract、virtual、static)

base关键字 base 关键字用于在派生实现对公有或者受保护成员的访问,但是只局限在构造函数、实例方法和实例属性访问器调用上已被其他方法重写的方法。...2、new一个struct,new运算符用于调用其带构造函数,完成实例的初始化。 3、new一个int,new运算符用于初始化为0。 4、 new运算符不可重载。...二、new修饰符 new 关键字可以显式隐藏继承的成员。 隐藏继承的成员,该成员的派生版本将替换版本。 虽然可以在不使用 new 修饰符的情况下隐藏成员,但会生成警告。...virtual的使用会有两种情况: 情况1:在定义了virtual方法,但在派生没有重写该虚方法。那么在对派生实例的调用,该虚方法使用的是定义的方法。...情况2:在定义了virtual方法,然后在派生中使用override重写该方法。那么在对派生实例的调用,该虚方法使用的是派生重写的方法

62820

C++和java多态的区别

2) 调用(本例是Base)的构造函数 3) 在的构造函数调用init(),执行程序首先判断出当前对象的实际类型是Base(注意:Derived还没构造出来,当然不会是Derived,这是与...,java例子应该被初始化(这里是value)没有被初始化,派生根本不能重用初始化函数。...试问,如果初始化要在构造完成,并且初始化逻辑比较复杂,派生也需要额外的初始化,派生是不是需要重新实现初始化函数呢?这样的面向对象方法好不好呢?欢迎大家讨论。...Child对象的初始化过程是:       首先为的实例变量x分配内存空间,因为在定义变量x为它赋了(int x=10),所以会同时将这个赋给x。      ...其次调用的无参构造函数,Parent的构造函数做的唯一的事情就是调用了add(2);       第三、由于子类的add(int y)方法覆盖了方法,所以add(2)实际调用的是子类的方法

92010
领券