My question is somewhat similar to this ; this concerns object methods, not the content of modules. I want to know if I can use the inspect module to get methods defined only in the class I am asking about, not its parent.
I need this because my child class defines macro methods that access the parent methods at a higher level of abstraction, and I donβt want the user to have to worry about the lower level methods defined all the way up the inheritance tree.
Here is a simplified example:
class Foo(object): def __init__(self): pass def f1(self): return 3 def f2(self): return 1 class Bar(Foo): def __init__(self): Foo.__init__(self) def g1(self): return self.f1() + self.f2() def g2(self): return self.f1() - self.f2() import inspect inspect.getmembers(Bar, inspect.ismethod)
Output:
[('__init__', <unbound method Bar.__init__>), ('f1', <unbound method Bar.f1>), ('f2', <unbound method Bar.f2>), ('g1', <unbound method Bar.g1>), ('g2', <unbound method Bar.g2>)]
The user does not need to know or care about the existence of f , since she will only be interested in g s. (Of course, this conclusion makes sense in the vast majority of contexts, since all these methods will be tied to the object when it is created.) For a long inheritance tree, the returned list can get a lot of time and things, pertaining to the user.
How can I make it leave f1 and f2 in this list? Is there an equivalent to the __module__ attribute for methods defined in classes? Even better is it possible to do the same with instance methods?
python methods introspection
Benjamin Hodgson Aug 13 2018-12-12T00: 00Z
source share