Доступ к цепочке атрибутов в PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Доступ к цепочке атрибутов в Python

Сообщение Anonymous »


Я пытаюсь создать в Python следующие отношения:
[*]За буквой A может следовать B или C. [*]За B может следовать A. [*]За C может следовать A
Мой текущий подход основан на этом классе

Элемент класса: def __init__(я, имя): self.name = имя self.followers = {} def add_follower(сам, последователь): self.followers[follower.name] = подписчик setattr(self, Follower.name.lower(), Follower) Защитная помощь (себя): return f"Помощь для {self.name}" element_a = Элемент('A') element_b = Элемент('B') element_c = Элемент('C') element_a.add_follower(element_b) element_a.add_follower(element_c) element_b.add_follower(element_a) element_c.add_follower(element_a) Это прекрасно работает. Когда я набираю element_a.b.a.c.help() в REPL, я получаю 'Help for C'. Кроме того, при вводе REPL, например. element_a.b.a. Я получаю b и c в качестве кандидатов на завершение, а это именно то, что мне нужно (всегда видеть, какие следующие разрешенные элементы).< /п> Однако теперь мне хотелось бы иметь метод истории, который возвращает взятую последовательность, например. element_a.b.a.c.history() должен возвращать ["A", "B", "A", "C"]. И здесь я застрял.

Моей первой идеей было использовать add_follower() для установки атрибута parent, который я мог бы использовать для восстановления цепочки, но это не сработало. Вызов ....history() вернет только последний элемент, например. ...a.c.history() возвращает ["A"].

Насколько я понимаю, это имеет смысл, поскольку add_follower() создает ссылку на объект и создает ее только один раз. Таким образом, родительский элемент будет установлен только один раз.

Таким образом, есть ли способ
[*]установить связь между элементами и сделать их доступными при вводе (кандидаты на завершение) [*]восстановить последовательность по требованию?
Большое спасибо!
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»