Python : Assert that variable is instance method?

后端 未结 2 1093
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-03 13:14

How can one check if a variable is an instance method or not? I\'m using python 2.5.

Something like this:

class Test:
    def method(self):
        p         


        
相关标签:
2条回答
  • 2020-12-03 14:03

    If you want to know if it is precisely an instance method use the following function. (It considers methods that are defined on a metaclass and accessed on a class class methods, although they could also be considered instance methods)

    import types
    def is_instance_method(obj):
        """Checks if an object is a bound method on an instance."""
        if not isinstance(obj, types.MethodType):
            return False # Not a method
        if obj.im_self is None:
            return False # Method is not bound
        if issubclass(obj.im_class, type) or obj.im_class is types.ClassType:
            return False # Method is a classmethod
        return True
    

    Usually checking for that is a bad idea. It is more flexible to be able to use any callable() interchangeably with methods.

    0 讨论(0)
  • 2020-12-03 14:06

    inspect.ismethod is what you want to find out if you definitely have a method, rather than just something you can call.

    import inspect
    
    def foo(): pass
    
    class Test(object):
        def method(self): pass
    
    print inspect.ismethod(foo) # False
    print inspect.ismethod(Test) # False
    print inspect.ismethod(Test.method) # True
    print inspect.ismethod(Test().method) # True
    
    print callable(foo) # True
    print callable(Test) # True
    print callable(Test.method) # True
    print callable(Test().method) # True
    

    callable is true if the argument if the argument is a method, a function (including lambdas), an instance with __call__ or a class.

    Methods have different properties than functions (like im_class and im_self). So you want

    assert inspect.ismethod(Test().method)  
    
    0 讨论(0)
提交回复
热议问题