How to test if a class attribute is an instance method

后端 未结 4 1244
逝去的感伤
逝去的感伤 2021-02-20 02:15

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 check

相关标签:
4条回答
  • 2021-02-20 02:41

    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")
    
    0 讨论(0)
  • 2021-02-20 02:42
    import types
    
    print isinstance(getattr(your_object, "your_attribute"), types.MethodType)
    
    0 讨论(0)
  • 2021-02-20 02:43
    def hasmethod(obj, name):
        return hasattr(obj, name) and type(getattr(obj, name)) == types.MethodType
    
    0 讨论(0)
  • 2021-02-20 02:49

    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
    
    0 讨论(0)
提交回复
热议问题