一个子类可以继承父类的所有属性,不管是父类的数据属性还是方法。

class Father(object):
num = 0 def __init__(self):
print "I'm Parent init" def foo(self):
print "I'm Parent foo" class Children(Father):
def __init__(self):
super(Children, self).__init__()
print "I'm Child init" def foo(self):
Father.foo(self) # 访问父类被覆盖的方法
print "I'm Child foo" ob = Children()
print ob.num #访问父类属性
ob.foo()
Father.foo(ob) # 访问父类被覆盖的方法

结果输出为

I'm Parent init
I'm Child init
0
I'm Parent foo
I'm Child foo
I'm Parent foo

多继承

经典类:深度优先,从左至右

新式类:广度优先,从左至右

新式类与经典类的区别在于是否有继承object基类

class P1: #(object):
def foo(self):
print "I'm P1-foo" class P2: #(object):
def foo(self):
print "I'm P2-foo"
def bar(self):
print "I'm P2-bar" class C1(P1, P2):
pass class C2(P1, P2):
def bar(self):
print "I'm C2-bar" class GC(C1, C2):
pass gc = GC()
gc.foo()
gc.bar()

它们的关系图如下

当(object)注释掉,变为经典类时,会先查找最亲的父类,结果为

I'm P1-foo    # GC -> C1 -> P1
I'm P2-bar # GC -> C1 -> P1 -> P2,如果P2没有bar()方法,则返回从C2搜索

当(object)取消注释,变为新式类时,会先查找同胞类,结果为

I'm P1-foo    # GC -> C1 -> C2 -> P1
I'm C2-bar # GC -> C1 -> C2 #找到相应方法,就不会继续继续查找父类

新式类中可以使用__mro__属性来显示查找顺序

print GC.__mro__
#结果为
#(<class '__main__.GC'>, <class '__main__.C1'>, <class '__main__.C2'>, <class '__main__.P1'>, <class '__main__.P2'>, <type 'object'>)

最新文章

  1. Linux vi
  2. linux 内核源代码
  3. hql语句关联查询(select new )
  4. 真正理解KMP算法
  5. HTML 的 iframe 元素
  6. 【转贴】 Flex 预编译处理 与 手机项目、Web项目、Air项目自由转换
  7. Vulkan Tutorial 14 Integration pipeline
  8. 图片布局css
  9. C# 数组Array
  10. JavaScript中为什么使用立即执行函数来封装模块?
  11. SwipeRefreshLayout详解和自定义上拉加载更多
  12. java输入输出流(I/O)总结
  13. java JDBC编程流程步骤
  14. React/anu实现弹出层2
  15. ios label的一些设置
  16. OpenCL 设备队列
  17. 在 Docker 中部署 ASP.NET CORE 应用
  18. PIE_SDK.NET功能表
  19. rest与restful
  20. [Leetcode Week3]Evaluate Division

热门文章

  1. 测试FlowTable
  2. 模拟实现MyBatis中通过SQL反射实体类对象功能
  3. HTML5项目笔记10:使用HTML5 IndexDB设计离线数据库
  4. PLSQL集合类型
  5. hdu2037今年暑假不AC(贪心,活动安排问题)
  6. Python搭配unittest
  7. Objective-C Block数据类型 @protocol关键字
  8. python编程os、os.path 模块中关于文件、目录常用的函数使用方法
  9. 【WXS数据类型】String
  10. [问题] docker: Failed to start Docker Application Container Engine.