Как реализовать такой класс в 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)