Как реализовать такой класс в Python?

Очень необычный вопрос :)

Допустим, есть примерно такой код:

class One:
    class Two:
        class Three:
            ...

Что нужно:

print(One.Two.Three)  # выведет строку: 'One:Two:Three'

То есть, вся эта система из вложенных друг в друга классов должна при обращении к одному из них (Three в данном случае) выводить список всех классов, которые находятся выше, а также текущего (Three).

К чему я пришёл:

class MC(type):
    def __repr__(cls):
        return cls.__repr__(cls)


class Test(metaclass=MC):
    def __repr__(cls):
        return cls.__name__


print(Test)  # 'Test'

Данный код выводит имя текущего класса (Test), но нужно реализовать то же самое, только с учётом вложенных классов.

Спасибо!


Ответы (1 шт):

Автор решения: vitidev

Вот такой финт ушами

class Meta(type):

    def __init__(cls, name, bases, namespace):
        setattr(cls, "__qualnamemod__", getattr(cls, "__qualname__").replace('.', ':'))

    def __repr__(self):
        return getattr(self, "__qualnamemod__")


class One(metaclass=Meta):
    class Two(metaclass=Meta):
        class Three(metaclass=Meta):
            pass


print(One.Two.Three)
→ Ссылка