¿El mismo nombre para classmethod y instancemethod?

Me gustaría hacer algo como esto:

class X:

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

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

Y ahora llamaid() ya sea para la clase o una instancia de la misma:

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

Obviamente este código exacto no funciona, pero ¿hay alguna forma similar de hacerlo funcionar? ¿O alguna otra solución para obtener ese comportamiento sin demasiadas cosas "hacky"?

Respuestas a la pregunta(5)

Su respuesta a la pregunta