如何调用父类的__repr__?

时间:2014-07-27 06:35:33

标签: python

所以我想要解决的情况非常简单。假设我有一个子类C,它扩展了父BA。父母BA各自拥有自己的__repr__方法。当我打印C时,始终会调用父__repr__的{​​{1}}方法,但我想调用父A

我该怎么做?

2 个答案:

答案 0 :(得分:4)

假设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 :(得分:0)

如果我只想调用继承的类的repr,我会做:

class C(B, A): # whatever order
    def __repr__(self):
        return A.__repr__(self)

我有一个类似的案例,但与这个问题略有不同。我想打印一个继承类的默认代表。对我来说,类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)))