如何使用具有相同名称并相互依赖的方法处理python继承?

时间:2014-06-23 19:16:30

标签: python

我试着维持一堂课。我希望的基本程序结构如下所示。

class FooFather():
    def __init__(self):
        self.meta=0
    def add(self):
        self.meta+=1
    def act(self):
        self.add()
class FooChild(FooFather):
    def __init__(self):
        FooFather.__init__(self)
    def add(self):
        self.meta+=2
    def act(self):
        FooFather.act(self)

结果如下所示。

foo=FooChild()
foo.act()
print(foo.meta)
=>2     //not 1 I want to have

我理解机制。子类覆盖父方法(包括添加和操作)。如何同时覆盖一个方法我可以保持原始方法之间的关系?

3 个答案:

答案 0 :(得分:0)

self指的是当前实例。因此,当FooFather.act()调用self.add()时,它指的是当前实例的add方法,即FooChild()实例。因此,FooChild.add(self)被调用。

如果您希望FooFather.act()拨打FooFather.add(),则需要明确FooFather.act()这样做:FooFather.add(self)

答案 1 :(得分:0)

根据你的问题不确定你真正想要的是什么,但我猜是这样的,act调用超类'add(使用python 2.7语法):

class FooFather(object):
    def __init__(self):
        self.meta=0
    def add(self):
        self.meta+=1
    def act(self):
        self.add()
class FooChild(FooFather):
    def __init__(self):
        super(FooChild, self).__init__()
    def add(self):
        self.meta+=2
    def act(self):
        super(FooChild, self).add()

答案 2 :(得分:0)

您可以使用伪私有,请参阅https://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references

class FooFather:
    def __init__(self):
        self.meta = 0

    def __add(self):
        print self.meta, '-->',
        self.meta += 1
        print self.meta

    def act(self):
        self.__add()

class FooChild(FooFather):
    def __add(self):
        print self.meta, '==>',
        self.meta += 2
        print self.meta

    def act2(self):
        FooFather.act(self)

    def act3(self):
        self.__add()



>>> c = FooChild()
>>> c.act()
0 --> 1
>>> c.act2()
1 --> 2
>>> c.act3()
2 ==> 4