在读python数据机构与算法, 发现了下面这个例子, 之前没有碰到过, 记录下来

In [17]: class A:
def f(self):
self.g()
def g(self):
print 'hello world'
....: In [18]: In [18]: class B(A):
def g(self):
print 'b is run'
....: In [19]: In [19]: b = B() In [20]: b.f()
b is run In [21]:

b.f()的执行过程是:

  • 由于b是B的实例对象, 所以首先在B类中查找f
  • 没有的话去父类A找, 找到后执行f函数
  • 接着在self.f函数中遇到self.g()
  • 由于self的值是一个类C的实例对象, 所以确定g的工作再从调用对象所属属性C类开始进行
  • 由于C类里面有函数g的定义, 所以应该调用C类里面的self.g(),输出b is run

这种通过动态约束确定调用关系的函数称为虚函数

最新文章

  1. String驻留带来的危害
  2. Struts2.X——搭建
  3. asp.net发送邮件
  4. 黑马程序员_ JAVA中的多线程
  5. c# 后台调前台的js
  6. 冲刺阶段 day5
  7. [cb] Unity Editor 添加右键菜单
  8. 利用cocostudio库函数 实现左右滑动的背包栏UI (cocos2d-x 2.2.0)
  9. style="display"之后不能获取offsetHeight或clientWidth这类测量的值
  10. DW(六):polybase访问Azure Blob Storage
  11. Lua 的函数库 01
  12. UIPickerView基本用法
  13. <转载>解决div里面img的缝隙问题
  14. android自定义listview实现圆角
  15. DS18B20
  16. juqery easy ui 实现二级菜单联动
  17. 基于内容的图像检索技(CBIR)术相术介绍
  18. Linq学习(主要参考linq之路)----2LINQ方法语法
  19. java 字符串笔记
  20. 基于Aspectj 注解实现 spring AOP

热门文章

  1. MongoDB--架构搭建(主从、副本集)之副本集
  2. 关于MATLAB处理大数据坐标文件2017529
  3. Normalize.css源码注释翻译&浏览器css兼容问题的理解
  4. 中奖概率算法(php 可用于刮刮卡,大转盘等抽奖算法)
  5. 【LeetCode】237. Delete Node in a Linked List
  6. “HK”的日常之ARP断网攻击
  7. CSS样式之选择器
  8. MOF编译器无法连接VMI服务器。原因可能是语义错误的解决方案
  9. Java 中基本类型和字符串之间的转换
  10. C# selecd,new,virtual,abstract与override