Одно имя для метода класса и метода экземпляра?

Я хотел бы сделать что-то вроде этого:

class X:

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

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

А теперь позвониid() для класса или его экземпляра:

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

Очевидно, что этот точный код не работает, но есть ли подобный способ заставить его работать? Или любые другие обходные пути, чтобы получить такое поведение без слишком большого количества "хакерских" вещей?