@classmethod
def iter_all_subclasses(cls, level=0) ->(int, type):
    """
        walk all subclasses of this class
        """
    for subclass in cls.__direct_subclasses:
        yield level, subclass
        yield from subclass.iter_all_subclasses(level=level + 1)
