强制从基类使用基类函数

时间:2014-04-14 02:28:18

标签: python python-2.7 inheritance super

这个问题的答案可能是" 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}}

2 个答案:

答案 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在一起,感觉就像一个脆弱的设计。