Mesmo nome para método de classe e método de instância?

Eu gostaria de fazer algo assim:

class X:

    @classmethod
    def id(cls):
        return cls.__name__

    def id(self):
        return self.__class__.__name__

E agora ligueid() para a classe ou uma instância dela:

>>> X.id()
'X'
>>> X().id()
'X'

Obviamente, esse código exato não funciona, mas existe uma maneira semelhante de fazê-lo funcionar? Ou qualquer outra solução alternativa para obter esse comportamento sem muita coisa "hacky"?

questionAnswers(5)

yourAnswerToTheQuestion