I used classmethod because it was classmethod before. I imagine I could do an isinstance check in there as well to make sure that what we get back is the right type.
The paradigm is to allow gen3 butler to use the s3 put/get without going through a temporary file. Whether this happens or not can be controlled by the formatter itself. The YAML/pickle/JSON gen3 formatters already support this mode. For Packages it should never be a problem. I get your point that it might be better for a Formatter to not reuse the code path of always going through bytes before writing to files so that the formatter can be configured to dump to disk without blowing up memory. That's downstream from this ticket though.