如何通过派生类实例访问父类对象?

10 投票
6 回答
25737 浏览
提问于 2025-04-15 19:18

假设我有这些类:

class A():
    msg = 'hehehe'

class B(A):
    msg = 'hohoho'

class C(B):
    pass

现在我有一个 BC 的实例。我该如何通过这个实例获取父类对象中的变量 msg 呢?

我试过这样做:

foo = B()
print super(foo.__class__).msg

但是我收到了这个错误信息:

类型错误:super() 的第一个参数必须是类型,而不是类对象

6 个回答

3

不太明白你为什么想这么做

>>> class A(object):
...     msg = 'hehehe'
... 
>>> class B(A):
...     msg = 'hohoho'
... 
>>> foo=B()
>>> foo.__class__.__mro__[1].msg
'hehehe'
>>> 
16

你其实想要使用

class A(object):
    ...
...
foo = B()
bar = super(foo.__class__, foo)
print bar.msg

基类必须是新式类,也就是要从 object 这个类继承。

13

如果这个类是单继承的:

foo = B()
print foo.__class__.__bases__[0].msg
# 'hehehe'

如果这个类是多继承的,那么这个问题就没什么意义了,因为可能有多个类都定义了 'msg',而这些定义可能都是有用的。你最好提供实际的父类(也就是 A.msg)。另外,你也可以像@Felix的回答中提到的那样,遍历所有直接的父类。

撰写回答