文档章节

python继承中重载问题:私有函数不能被子类重写

python-yzw
 python-yzw
发布于 2017/06/05 14:25
字数 686
阅读 29
收藏 0

在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的解释器根本就不采用重写函数的机制(猜的 ),因此不会调用子类中的函数。

好吧,这是我认为的,如果有错,希望大家指出

本文转载自:http://blog.csdn.net/name_z/article/details/49020231

共有 人打赏支持
python-yzw
粉丝 3
博文 91
码字总数 43717
作品 0
深圳
程序员
私信 提问
ParisGabriel:Python全栈工程师(0基础到精通)教程 第二十八课(多继承、函数重写)

ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰   开局一张图                       Python人工智能从入门到精通 补充:  对象 ------------...

ParisGabriel
07/27
0
0
Python面向对象编程之我见

面向对象基本概念 面向对象是一种编程范式。范式是指一组方法论。编程范式是一组如何组织代码的方法论。编程范式指的是软件工程中的一种方法学。 一些主流的编程范式: OOP - 面向对象编程 ...

bigstone2012
06/29
0
0
史上最全的Python面向对象知识点疏理

面向对象技术简介 类: 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 类变量:类变量在整个实例化的对象中是公用的。类变量定义...

乐乎无趣
2017/11/03
0
0
python面向对象笔记(what)

python面向对象笔记(what) 1.什么是面向对象? 对象相当于把函数和全局变量封装起来,属相相当于全局变量,方法相当于函数。 不同对象相互隔离,全局变量互不影响。 2.什么是隐藏属性? 在方...

PowerMichael
04/24
0
0
掌握面向对象编程本质,彻底掌握OOP

面向对象基本概念 面向对象是一种编程范式。范式是指一组方法论。编程范式是一组如何组织代码的方法论。编程范式指的是软件工程中的一种方法学。 一些主流的编程范式: OOP - 面向对象编程 ...

bigstone2012
07/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

w, vmstat, top, sar, nload命令查看系统状态信息

w/uptime 查看系统负载 cat /proc/cpuinfo 查看cpu核数 vmstat 监控系统状态,用法 vmstat 1,关键的几列: r, b, swpd, si, so, bi, bo, us, wa top 查看进程使用资源情况 top -c 显示详细的...

野雪球
今天
1
0
小白创建一个spring boot项目

进入 https://start.spring.io/

lilugirl
今天
3
0
Alibaba Java诊断利器Arthas实践--使用redefine排查应用奇怪的日志来源

背景 随着应用越来越复杂,依赖越来越多,日志系统越来越混乱,有时会出现一些奇怪的日志,比如: [] [] [] No credential found 那么怎样排查这些奇怪的日志从哪里打印出来的呢?因为搞不清...

hengyunabc
今天
2
0
home hosts

home hosts lwk@qwfys:~$ cat /etc/hosts127.0.0.1 localhost127.0.1.1 qwfys192.168.56.101vm600.qwfys.com39.108.212.91alpha1.ppy.com39.108.117.122alpha2.p......

qwfys
今天
3
0
大数据教程(6.1)hadoop生态圈介绍及就业前景

1. HADOOP背景介绍 1.1、什么是HADOOP 1.HADOOP是apache旗下的一套开源软件平台 2.HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理 3.HADOOP的核心组...

em_aaron
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部