Essa é uma pergunta muito boa, mas não tão desejável quanto a pergunta. Existe diferença entre o método usado 'self' e 'cls', embora analogamente estejam no mesmo local
def moon(self, moon_name):
self.MName = moon_name
#but here cls method its use is different
@classmethod
def moon(cls, moon_name):
instance = cls()
instance.MName = moon_name
Agora você pode ver que ambas são função da lua, mas uma pode ser usada dentro da classe, enquanto outro nome da função moon pode ser usado para qualquer classe.
Para uma abordagem de programação prática:
Ao projetar a classe de círculo, usamos o método area como cls em vez de self, porque não queremos que a área seja limitada apenas a uma classe específica de círculo.