【类不类四】类的继承
Python是一种面向对象的脚本语言,所谓OOP: (Object-oriented programming)面向对象编程是一种方法,
既然说是面向对象,那么肯定会有类这种东西。下面就来谈谈类的继承。
参考: http://www.xker.com/page/e2015/05/191327.html
super用法: http://www.cnblogs.com/lovemo1314/archive/2011/05/03/2035005.html
1.单继承
常见并且常用的是单继承,也就是只继承一个父类。
1 # coding: utf-8 2 3 class Parent(object): 5 # __init__是构造函数,为创建对象/类初始化时首先执行的方法 6 def __init__(self): 7 self.parent = u"父类的属性" 8 print u"来自父类的构造函数" 9 10 def test(self, message): 11 print message + u", 来自父类的test方法" 12 13 class Children(Parent): 15 def __init__(self): 16 # 调用父类的构造函数 17 Parent.__init__(self) 18 19 def test(self, message): 20 # 调用父类的test方法" 21 Parent.test(self, message) 22 23 c = Children() 24 c.test(u"吾乃子类") 25 print c.parent
注意: 若是子类Children没有引用父类的构造函数__init__()的话,那么是无法使用它在该函数下定义的实例变量
self.parent的。
上面是一种写法,缺点就是,如果子类Chidren的父类换了的话,那么,子类就要这样改动了。
# 子类 class Children(A): def __init__(self): A.__init__(self) # Parent —> A def test(self, message): A.test(self, message) # Parent —>A
如果是代码量比较少的话,还可以手动来。可惜的是,大多时候都不是这样的情况。
因此,自Python 2.2开始,Python添加了一个关键字super,来解决这个问题。
用法如下(不适用于Python 3.x版):
class C(B):
def meth(self, arg):
super(C, self).meth(arg)
下面我们用super来修改下上面的代码
1 # coding: utf-8 2 3 class Parent(object): 4 # __init__是构造函数,为创建对象/类初始化时首先执行的方法 5 def __init__(self): 6 self.parent = u"父类的属性" 7 print u"来自父类的构造函数" 8 9 def test(self, message): 10 print message + u", 来自父类的test方法" 11 12 class Children(Parent): 13 # 调用父类的构造函数 14 def __init__(self): 15 super(Children, self).__init__() 16 17 # 调用父类的test方法" 18 def test(self, message): 19 super(Children, self).test(message) 20 21 c = Children() 22 c.test(u"吾乃子类")
输出结果都是一样的

浙公网安备 33010602011771号