Ответ 1
У меня есть модуль для решения этой проблемы. И это Python2/3-совместимое решение. И это позволяет тестировать методом наследовать от родительского класса.
Кроме того, этот модуль также может тестировать:
- обычный атрибут
- метод стиля собственности
- обычный метод
- STATICMETHOD
- classmethod
Например:
class Base(object):
attribute = "attribute"
@property
def property_method(self):
return "property_method"
def regular_method(self):
return "regular_method"
@staticmethod
def static_method():
return "static_method"
@classmethod
def class_method(cls):
return "class_method"
class MyClass(Base):
pass
Здесь решение только для статического метода. Но я рекомендую использовать модуль, размещенный здесь.
import inspect
def is_static_method(klass, attr, value=None):
"""Test if a value of a class is static method.
example::
class MyClass(object):
@staticmethod
def method():
...
:param klass: the class
:param attr: attribute name
:param value: attribute value
"""
if value is None:
value = getattr(klass, attr)
assert getattr(klass, attr) == value
for cls in inspect.getmro(klass):
if inspect.isroutine(value):
if attr in cls.__dict__:
bound_value = cls.__dict__[attr]
if isinstance(bound_value, staticmethod):
return True
return False