<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def parse_author(cls, marc):
 """ Parse author from `marc` data. Args: marc (obj):
 :class:`.MARCXMLRecord` instance. See module :mod:`.marcxml_parser` for details. Returns: obj: :class:`Author`. """

        name = None
        code = None
        linked_forms = None
        is_corporation = None
        record = None

        # parse informations from the record
        if marc["100a"]:  # persons
            name = _first_or_none(marc["100a"])
            code = _first_or_none(marc["1007"])
            is_corporation = False
            record = marc.datafields["100"][0]  # transport all fields
        elif marc["110a"]:  # corporations
            name = _first_or_none(marc["110a"])
            code = _first_or_none(marc["1107"])
            linked_forms = marc["410a2 "]
            is_corporation = True
            record = marc.datafields["110"][0]  # transport all fields
        else:
            return None

        # parse linked forms (alternative names)
        linked_forms = marc["410a2 "]

        # put together alt_name
        type_descriptor = ["osoba", "organizace"]
        alt_name = "%s [%s]" % (name, type_descriptor[is_corporation])
        if linked_forms:
            alt_name += " (" + ", ".join(linked_forms) + ")"

        return cls(
            name=name,
            code=code,
            linked_forms=linked_forms,
            is_corporation=is_corporation,
            record=record,
            alt_name=alt_name,
        )