Tutorial :How to test if a class attribute is an instance method



Question:

In Python I need to efficiently and generically test whether an attribute of a class is an instance method. The inputs to the call would be the name of the attribute being checked (a string) and an object.

hasattr returns true regardless of whether the attribute is an instance method or not.

Any suggestions?


For example:

class Test(object):      testdata = 123        def testmethod(self):          pass    test = Test()  print ismethod(test, 'testdata') # Should return false  print ismethod(test, 'testmethod') # Should return true  


Solution:1

def hasmethod(obj, name):      return hasattr(obj, name) and type(getattr(obj, name)) == types.MethodType  


Solution:2

import types    print isinstance(getattr(your_object, "your_attribute"), types.MethodType)  


Solution:3

You can use the inspect module:

class A(object):      def method_name(self):          pass      import inspect    print inspect.ismethod(getattr(A, 'method_name')) # prints True  a = A()  print inspect.ismethod(getattr(a, 'method_name')) # prints True  


Solution:4

This function checks if the attribute exists and then checks if the attribute is a method using the inspect module.

import inspect    def ismethod(obj, name):      if hasattr(obj, name):          if inspect.ismethod(getattr(obj, name)):              return True      return False    class Foo:      x = 0      def bar(self):          pass    foo = Foo()  print ismethod(foo, "spam")  print ismethod(foo, "x")  print ismethod(foo, "bar")  

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »