-2

If I have a class hierarchy in Python (we can assume there's no multiple inheritance), how can I find the class in which a method is defined? For example:

class C: def f(): pass class D(C): def f(): pass class E(D): pass 

If I call E().f(), this calls the method f that's defined in class D. Is there any way to get this information without calling the method, i.e:

assert get_defining_class(E, f) == D 

One idea is to search each class in E.__mro__ for 'f' - would that work?

(This sounds like a duplicate of Find class in which a method is defined, but that question is about finding the defining class from within f itself.)

0

1 Answer 1

2

Yeah, an MRO search is how you'd do that:

def get_defining_class(klass, methodname): for ancestor in klass.__mro__: if methodname in ancestor.__dict__: return ancestor raise ValueError('Method not found') 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.