【类不类四】类的继承

    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"吾乃子类")
super继承

    输出结果都是一样的

 

posted @ 2016-11-29 14:19  坏小孩D_R  阅读(287)  评论(0)    收藏  举报