所以我想要解决的情况非常简单。假设我有一个子类C
,它扩展了父B
和A
。父母B
和A
各自拥有自己的__repr__
方法。当我打印C
时,始终会调用父__repr__
的{{1}}方法,但我想调用父A
。
我该怎么做?
答案 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)))