如何调用父类的 __repr__ 方法?

3
我想要解决的情况非常简单。假设我有一个子类 C,它继承了父类BA。父类BA都有自己的__repr__方法。当我打印C时,总是调用父类A__repr__方法,但我想调用父类B__repr__方法。
如何实现呢?

可能是重复的问题:Python多重继承:选择调用哪个super() - Jeff Mercado
2个回答

5
假设A的定义如下:
class A():
    def __repr__(self):
        return "This is A"

同样地,B的定义方式如下:

class B():
    def __repr__(self):
        return "This is B"

虽然C的定义如下:

class C(A, B):
    def __init__(self):
        pass

或类似的东西。print(A())将产生This is A,而对于B(),同样会产生This is B。正如您所描述的那样,print(C())将给出This is A。但是,如果您只是改变C的继承顺序:

class C(B, A): # change order of A and B
    def __init__(self):
        pass

那么,print(C())将会给你This is B。就这么简单。


1
如果我只想调用一个继承类的repr,我会这样做:
class C(B, A): # whatever order
    def __repr__(self):
        return A.__repr__(self)

我有一个类似但略有不同于这个问题的案例。我想要打印继承类的默认repr。对我来说,类C是动态定义的,其中B是一个mixin类,但我想显示“主”类A的名称和模块。最终我采用了这个解决方案。

class C(B, A):
    def __repr__(self):
        '''Override repr to show the name and path of the main cls.'''
        return '<{} {}.{} object at {}>'.format(
            self.__class__.__name__,
            A.__module__,
            A.__name__,
            hex(id(self)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接