Defines a generator used to walk into modules.

    :param module: Module to walk.
    :type module: ModuleType
    :return: Class / Function / Method.
    :rtype: object or object

def trace_walker(module):
    """
    Defines a generator used to walk into modules.

    :param module: Module to walk.
    :type module: ModuleType
    :return: Class / Function / Method.
    :rtype: object or object
    """

    for name, function in inspect.getmembers(module, inspect.isfunction):
        yield None, function

    for name, cls in inspect.getmembers(module, inspect.isclass):
        yield cls, None

        for name, method in inspect.getmembers(cls, inspect.ismethod):
            yield cls, method

        for name, function in inspect.getmembers(cls, inspect.isfunction):
            yield cls, function

        for name, accessor in inspect.getmembers(cls, lambda x: type(x) is property):
            yield cls, accessor.fget
            yield cls, accessor.fset
            yield cls, accessor.fdel