Доступ к цепочке атрибутов в Python ⇐ Python
Доступ к цепочке атрибутов в Python
Я пытаюсь создать в 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() создает ссылку на объект и создает ее только один раз. Таким образом, родительский элемент будет установлен только один раз.
Таким образом, есть ли способ
[*]установить связь между элементами и сделать их доступными при вводе (кандидаты на завершение) [*]восстановить последовательность по требованию?
Большое спасибо!
Я пытаюсь создать в 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() создает ссылку на объект и создает ее только один раз. Таким образом, родительский элемент будет установлен только один раз.
Таким образом, есть ли способ
[*]установить связь между элементами и сделать их доступными при вводе (кандидаты на завершение) [*]восстановить последовательность по требованию?
Большое спасибо!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Группа атрибутов отсутствует при назначении ее группе атрибутов по умолчанию.
Anonymous » » в форуме Linux - 0 Ответы
- 88 Просмотры
-
Последнее сообщение Anonymous
-