I hadn't realised that they shouldn't use self. Shouldn't it be a module-level function then? I recall something about only using classmethod when you actually need it, but I can't remember what it's actually for