python继承中重载问题:私有函数不能被子类重写
来源:互联网 发布:linux开机启动过程 编辑:程序博客网 时间:2024/04/29 21:51
版本:3.4
在python的继承中,基类的私有函数不能被子类重写
例子
下图是私有函数的重写:
下图是公有函数的重写:
例子中,base类有两个函数go,run,其中run里面调用go,而extend类继承base类,并重写go函数;最后创建extend对象调用run函数:
当go函数为公有函数时,extend对象调用的run中调用的go是重写后的go函数,也就是extend类自己的go函数
当go函数为私有函数时,extend对象调用的run中调用的go却依然是基类的go函数
原因:
在官方文档中好像没有提到会出现这个问题,下面是官方文档里面关于类继承的话:
Derived classes may override methods of their base classes. Because methods have no special privileges when calling other methods of the same object, a method of a base class that calls another method defined in the same base class may end up calling a method of a derived class that overrides it. (For C++ programmers: all methods in Python are effectively virtual.)
第一个黑体字部分说,子类可以重写基类的函数
第二个黑体加斜体的部分,应该是说:一个属于该基类的函数调用另一个同属于该基类的函数时,最终可能会调用子类中重写该函数的函数。
也就是说:函数a属于类A,函数b属于类A,函数bb属于类B,类B继承类A,其中函数bb重写了函数b,然后函数a里面调用函数b,当类B调用函数a时,a里面最终调用的可能是函数bb
关键是它里面用了may,又可以有两种解释,上面的是一种:存在重写函数,但还是不一定会调用;还有第二种,不知道是否存在重写函数,有因此用may,换句话说有重写函数一定用重写函数。。。
好吧,从里面我也没看出原因,不过,我自己认为的原因是这样:
在继承中,子类不能调用基类中的私有成员,因此基类的私有成员实际上对子类是不可见的,所以重写基类的私有函数的大前提就已经错了。。。而子类中的与基类一样的函数,也只是子类中的一个普通函数,因为算不上重写,因此在调用时,python的解释器根本就不采用重写函数的机制(猜的 ),因此不会调用子类中的函数。
好吧,这是我认为的,如果有错,希望大家指出
- python继承中重载问题:私有函数不能被子类重写
- JAVA中私有属性private能被子类继承吗?
- 私有成员能被子类继承吗?
- 私有对象能被子类继承吗
- c++中 static 变量和函数能否被子类继承
- 创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类的方法,而被子类重载的方法不会调用?
- 创建子类对象时,父类构造函数中调用被子类重写的方法为什么调用的是子类的方法,而被子类重载的方法不会调用?
- java 私有的成员能被子类继承吗?
- 私有的成员能被子类继承吗?
- 不要在构造函数中调用以后会被子类重写的方法
- Python中类的继承,函数重载,匿名对象
- 父类私有变量是否被子类继承详细解说(答案:内存中存在,但sun公司定义为不继承)
- 父类私有变量是否被子类继承详细解说(答案:内存中存在,但sun公司定义为不继承)
- Java 构造函数不可以继承,因此不能被重写,但可以被重载
- [Java]static、final修饰的方法是否可以被子类继承、是否可以被子类重写及final修饰详解
- python-对象、私有属性_方法、继承(多重继承)、重写
- C#中继承实现父类方法、重写、重载
- C#中继承实现父类方法、重写、重载
- linux终端的概念
- 处理myeclipse编辑jsp卡的问题
- iOS NSString 过滤非法字符串
- 多线程中的Double Close与System Call Hook
- VS恢复默认设置的2种方法
- python继承中重载问题:私有函数不能被子类重写
- VC中CTime和SYSTEMTIME转化
- hdu1050 Moving tables
- js 字符串转换成数字的三种方法
- 在线的色值转换RGB网址
- Android开发之高仿QQ消息侧拉删除
- 机器学习算法的本质(Python和R准则)
- Android在drawable资源文件中绘制圆形背景
- 制作简单的法线贴图,使图片有凹凸感