我试着维持一堂课。我希望的基本程序结构如下所示。
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
我理解机制。子类覆盖父方法(包括添加和操作)。如何同时覆盖一个方法我可以保持原始方法之间的关系?
答案 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