这个问题的答案可能是" W-what!?什么!@#$ - 停止!!这是一个糟糕的主意!" ,但我想听听你的想法......
我有两个类,一个继承自另一个。
class A(object):
def t1(self):
self.t2()
def t2(self):
print "A"
class B(A):
def t1(self):
super(B, self).t1()
def t2(self):
print "B"
>>> a = A()
>>> b = B()
>>> a.tl()
A
>>> b.t1()
B
在此示例中B.t1
调用super
函数,调用A.t1
,但当它self.t2()
时,A.t1
函数返回到B
执行B.t2()
class A(object):
def t1(self):
if type(self) == A:
self.t2()
else:
super(type(self), self).t2()
def t2(self):
print "A"
class B(A):
def t1(self):
super(B, self).t1()
def t2(self):
print "B"
>>> a = A()
>>> b = B()
>>> a.tl()
A
>>> b.t1()
A
课程
我如何强制从基类调用以保留在基类中?这就是我能想到的,而且它有效,但我认为这是一个更好的解决方案。
{{1}}
答案 0 :(得分:1)
在A
' t1
您可以A.t2(self)
。但是,这种设置可能是脆弱设计的一个指标。
答案 1 :(得分:1)
您使用双下划线name mangling。
class A(object):
def t1(self):
self.__t2() # <---- changed the call
def t2(self):
print "A"
__t2 = t2 # private copy of original t2() method
>>> a = A()
>>> b = B()
>>> a.tl()
A
>>> b.t1()
A
但名称修改有一个巨大的默认值:如果函数只有双下划线作为名称,它会使单元测试更加困难和丑陋。
但是我和@BrenBarn在一起,感觉就像一个脆弱的设计。