diff --git a/oslo_utils/reflection.py b/oslo_utils/reflection.py index 486e75c..34714fc 100644 --- a/oslo_utils/reflection.py +++ b/oslo_utils/reflection.py @@ -165,7 +165,7 @@ def is_same_callback(callback1, callback2, strict=True): def is_bound_method(method): """Returns if the given method is bound to an object.""" - return bool(get_method_self(method)) + return get_method_self(method) is not None def is_subclass(obj, cls): diff --git a/oslo_utils/tests/test_reflection.py b/oslo_utils/tests/test_reflection.py index fce0f70..f9c7e2f 100644 --- a/oslo_utils/tests/test_reflection.py +++ b/oslo_utils/tests/test_reflection.py @@ -72,6 +72,14 @@ class Class(object): pass +class BadClass(object): + def do_something(self): + pass + + def __nonzero__(self): + return False + + class CallableClass(object): def __call__(self, i, j): pass @@ -145,6 +153,15 @@ class CallbackEqualityTest(test_base.BaseTestCase): self.assertTrue(reflection.is_same_callback(b.b, c.b, strict=False)) +class BoundMethodTest(test_base.BaseTestCase): + def test_baddy(self): + b = BadClass() + self.assertTrue(reflection.is_bound_method(b.do_something)) + + def test_static_method(self): + self.assertFalse(reflection.is_bound_method(Class.static_method)) + + class GetCallableNameTest(test_base.BaseTestCase): def test_mere_function(self):