    """The HierRole class."""

    from Role import Role

    class HierRole(Role):
        """HierRole is a hierarchical role.

        It points to its parent roles. The hierarchy cannot have cycles.

        """

        def __init__(self, name, description=None, superRoles=[]):
            Role.__init__(self, name, description)
            for role in superRoles:
                assert isinstance(role, Role)
            self._superRoles = superRoles[:]

        def playsRole(self, role):
            """Check whether the receiving role plays the role that is passed in.

            This implementation provides for the inheritance that HierRole supports.

            """
            if self == role:
                return True
            for superRole in self._superRoles:
                if superRole.playsRole(role):
                    return True
            else:
                return False