#python #class #methods #instance
#python #класс #методы #экземпляр
Вопрос:
У меня есть класс Node, который принимает переменное количество аргументов ключевого слова, представляющих варианты, которые может выбрать игрок, и пункты назначения, которые должны быть связаны с этими вариантами. Таким образом, в зависимости от ввода пользователя должен вызываться метод play() определенного другого экземпляра узла.
class Node:
def __init__(self, txt, **kwargs):
self.txt = txt
self.__dict__.update(kwargs)
c_key, d_key = "c", "d"
choices = [val for key, val in self.__dict__.items() if c_key in key]
destinations = [val for key, val in self.__dict__.items() if d_key in key]
self.choices = choices
self.destinations = destinations
def play(self):
print(self.txt)
try:
for c in self.choices:
print(c)
except:
pass
decision = input()
dec = int(decision)
for choice in self.choices:
if choice.startswith(decision):
self.destinations[dec-1].play() <- this obviously doesn't work
node_0 = Node("Intro-Text",
c1 = "1) Choice A",
d1 = "node_1",
c2 = "2) Choice B",
d2 = "node_2")
node_1 = Node("Text Node 1")
node_0.play()
Например, когда ввод пользователя равен «1», следует вызывать node_1.play(), потому что d1 = «node_1», когда ввод равен «2», node_2.play(), потому что в d2 есть 2 и так далее.
Ответ №1:
Ваш основной код, вероятно, следует изменить, чтобы передавать ссылки на узлы, а не строки, идентифицирующие узлы:
node_1 = Node("Text Node 1")
node_2 = Node("Text Node 2")
node_0 = Node("Intro-Text",
c1 = "1) Choice A",
d1 = node_1, # pass node reference instead of string
c2 = "2) Choice B",
d2 = node_2) # pass node reference instead of string
Комментарии:
1. Я знал, что решение, вероятно, будет простым, но не таким простым, ха-ха. Потрясающе, спасибо!
2. @yalo, добро пожаловать. Пожалуйста, примите и поддержите ответ, если вы считаете, что он ответил на ваш вопрос и помог.