如何通过派生类实例访问父类对象?
假设我有这些类:
class A():
msg = 'hehehe'
class B(A):
msg = 'hohoho'
class C(B):
pass
现在我有一个 B
或 C
的实例。我该如何通过这个实例获取父类对象中的变量 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的回答中提到的那样,遍历所有直接的父类。