Return the __init__ signature element(s) (var: type = default value).  Note that signatures are not
        generated for non-python names, although we do take the liberty of suffixing a '_' for reserved words
        (e.g. class: @int  generates "class_: int = None"

        :param all_are_optional: If True, all items are considered to be optional

        :return: List of signatures

def signatures(self, all_are_optional: Optional[bool] = False) -> List[str]:
        """ Return the __init__ signature element(s) (var: type = default value).  Note that signatures are not
        generated for non-python names, although we do take the liberty of suffixing a '_' for reserved words
        (e.g. class: @int  generates "class_: int = None"

        :param all_are_optional: If True, all items are considered to be optional

        :return: List of signatures
        """
        if self._type_reference:
            # This assumes that references are to things that have signatures
            ref = self._context.reference(self._type_reference)
            if not getattr(ref, 'signatures', None):
                raise NotImplementedError("Reference to " + self._type_reference + " is not valid")
            return self._context.reference(self._type_reference).signatures(all_are_optional)
        else:
            return [f"{self._names[rn]}: {self.python_type()} = " 
                    f"{self._ebnf.mt_value(self._typ)}" for rn, cn in self._names.items() if is_valid_python(cn)]