python 继承,子类可以覆盖父类的各种方法,包括__init__方法。

如果要覆盖父类的__init__方法,且希望在覆盖的方法中引用父类的__init__方法,比如在父类的__init__方法的基础上增加一些属性的设置或者其他。


则需要显示的引用父类的方法,否则,父类的方法不会被直接调用到的。


比如:


#coding:utf-8

# c继承了p,并实现了自己的__init__方法,也就是重新实现了__init__方法,但为了减少代码冗余
# c在自己的__init__方法里面引用了p的__init__方法,这种方法需要显示的调用p,并且要向p的
# __init__方法传递self变量

class p(object):
    def __init__(self,nm):
        self.name  = nm

class c(p):
    def __init__(self,nm,idnum):
        p.__init__(self,nm)
        self.id  = idnum

c1 = c('john',11)
print c1
print c1.name,c1.id


运行结果是:


[root@puppet-master-231-test eg_4]# python2.7  class_inherit_demo_4.py
<__main__.c object at 0x7efdf2ff6a90>
john 11