zoukankan      html  css  js  c++  java
  • python 多继承(新式类) 二

    在python中,要调用父类的某个方法,python2.2之前需要如下代码:

    class A:
    def __init__(self):
       print "enter A"
       print "leave A"


    class B(A):
    def __init__(self):
       print "enter B"
       A.__init__(self)
       print "leave B"


    >>> b = B()

    enter B
    enter A
    leave A
    leave B

    观察类B,在使用A的__init__方法的时候,我们需要直接使用类的名字A去调用,并手动传入待绑定的对象self,从而达到调用父类的方法的目的。

    这样做有一个缺点就是当父类发生变化时,我们需要将代码中所有的分类引用全部替换成新的父类,如:

    class B(C):    # A --> C
    def __init__(self):
       print "enter B"
       C.__init__(self) # A --> C
       print "leave B"

    以上修改,在代码量还少的时候,还行,若是在大型项目中,手动去替换所有的地方,会崩溃~~

    庆幸的是python2.2之后,引入了super关键字,那么怎么使用super关键字改善上述代码.

    class A(object):  
    def __init__(self):
       print "enter A"
       print "leave A"

    class B(A):     # A --> C,若B的父类变为C类,则只需要更改此处一行代码即可
    def __init__(self):
       print "enter B"
       super(B, self).__init__() #super 关键字的使用
       print "leave B"

    运行代码

    enter B
    enter A
    leave A
    leave B

    发现输出与之前的例子一样,引入super关键字之后,即使父类发生改变,我们需要改动的地方只有一处,是使用super之后的优点。

  • 相关阅读:
    sql 中 in 与 exist 的区别
    with as (cte common table expression) 公共表表达式
    配置连接数据库的方式
    Dispose 与 close 方法 的区别
    抽象类
    default
    什么叫无符号整型
    hdu 5187 zhx's contest [ 找规律 + 快速幂 + 快速乘法 || Java ]
    poj 2480 Longge's problem [ 欧拉函数 ]
    lightoj 1293
  • 原文地址:https://www.cnblogs.com/panyinghua/p/3283755.html
Copyright © 2011-2022 走看看