This should call DefinedSubcommands and check if the list is empty. If it is, it should return "No supported subcommands". If it's not, then it should build the output you have.

There's no need for a `self.defined_subcommands` variable anywhere, not even in the subclasses.