Gets all of the property mappings from the given property mapper, considering the property mappings for self and the
    property mappings defined by the superclass.
    :param encoder: `self` when binded as class method
    :param property_mappings: mappings defined for the given encoder, excluding mappings defined by superclasses
    :param superclasses: superclasses of the given encoder. Property mappers in later superclasses may override the
    effects of property mappers defined by superclasses closer to the start of the list
    :return: all of the property mappings for the given encoder

def _get_all_property_mappings(encoder: MappingJSONEncoder, property_mappings: Iterable[JsonPropertyMapping],
                               superclasses: Tuple[PropertyMapper]) -> List[JsonPropertyMapping]:
    """
    Gets all of the property mappings from the given property mapper, considering the property mappings for self and the
    property mappings defined by the superclass.
    :param encoder: `self` when binded as class method
    :param property_mappings: mappings defined for the given encoder, excluding mappings defined by superclasses
    :param superclasses: superclasses of the given encoder. Property mappers in later superclasses may override the
    effects of property mappers defined by superclasses closer to the start of the list
    :return: all of the property mappings for the given encoder
    """
    mappings = []
    for superclass in superclasses:
        super_mappings = superclass._get_property_mappings(superclass)
        mappings.extend(super_mappings)

    # Add property mappings of own to end of the mappings list
    mappings.extend(property_mappings)

    # Note: It is very difficult to cull all property mappers that target the same properties, leaving only the ones
    # from the lowest class in the hierarchy. This is because such mappers may be encoded as functions. Given that such
    # overloading is unlikely to be used much and the cost of doing a mapping and then mapping again over the top of it
    # will likely be small, there will be no attempt of such a cull.
    return mappings