PyNewbie PyNewbie - 3 months ago 10
Python Question

Python: How to access parent class object through derived class instance?

I'm sorry for my silly question, but... let's suppose I have these classes:

class A():
msg = 'hehehe'

class B(A):
msg = 'hohoho'

class C(B):
pass


and an instance of B or C. How do I get the variable 'msg' from the parent's class object through this instance?
I've tried this:

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


but got the message: "TypeError: super() argument 1 must be type, not classobj".

Answer

If the class is single-inherited:

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

If the class is multiple-inherited, the question makes no sense because there may be multiple classes defining the 'msg', and they could all be meaningful. You'd better provide the actual parent (i.e. A.msg). Alternatively you could iterate through all direct bases as described in @Felix's answer.