def METHOD_NAME(self, old: type[Property[Any]], new: Property[Any]) -> Property[Any]:
    if self.__class__ == old:
        return new
    else:
        params = [ type_param.METHOD_NAME(old, new) for type_param in self.type_params ]
        return Either(*params)