Я пишу очень простую текстовую игру Escape, чтобы практиковать основы, которые я узнал до сих пор. Я просто запускаю его в онлайн -редакторе. У меня были проблемы с добавлением объектов класса в глобальный список, и я узнал, что это потому, что я инициализировал объекты, а затем добавил их в список. После переписывания, чтобы объекты были добавлены в список во время их инициализации, это сработало. Почему? (Игра еще не сделана, как вы увидите, я просто хочу захватить то, что происходит, прежде чем я продолжу.) < /P>
Оригинал, не работает: < /p>
class items():
def __init__(self, item, canOpen):
self.item = item
self.canOpen = canOpen
def pickup():
choice = input(f"There's some stuff on this shelf: {freeItems} - What will you pick up?")
#When freeItems is called, it displays [, ]
if choice not in freeItems:
print(f"What? There's no {choice} here. Choose again.")
#This runs no matter what I input, presumably because of the calling issue.
choice = input()
else:
playerInventory.append(choice)
freeItems.remove(choice)
print(f"""{choice} added to inventory!
These items remain on the shelf: {freeItems}
Let's try opening the door.""")
key = items("key",True)
flashlight = items("flashlight",False)
mirror = items("mirror",False)
freeItems = [key, flashlight, mirror]
playerInventory = []
playerName = input("Hi there! What's your name?")
print(f"Hi, {playerName}. So, bad news: you're trapped in this room. Good news: Your trusty disembodied narrator is here to help!")
pickup()
< /code>
новый, работа: < /p>
freeItems = []
playerInventory = []
class items():
def __init__(self, item, canOpen):
self.item = item
self.canOpen = canOpen
freeItems.append(self.item) #This is the new code that made it work
def pickup():
choice = input(f"There's some stuff on this shelf: {freeItems} - What will you pick up?")
if choice not in freeItems:
print(f"What? There's no {choice} here. Choose again.")
choice = input()
else:
playerInventory.append(choice)
freeItems.remove(choice)
print(f"""{choice} added to inventory!
These items remain on the shelf: {freeItems}
Let's try opening the door.""")
key = items("key",True)
flashlight = items("flashlight",False)
mirror = items("mirror",False)
playerName = input("Hi there! What's your name?")
print(f"Hi, {playerName}. So, bad news: you're trapped in this room. Good news: Your trusty disembodied narrator is here to help!")
pickup()
< /code>
В исходном коде я попытался добавить существующие объекты класса в глобальный список. Я ожидал, что объекты будут просто в списке, как будто я добавил в нее обычную переменную. На самом деле произошел этот вывод, когда был назван список: [ main .Items объект AT 0x7f4fbf4e08b0>, main .Items объект по адресу 0x7f4fbf4b3f70>], и я впоследствии не смог использовать список для намеченной цели. инициализация. Это сработало, как и предполагалось. Я просто не понимаю, в чем разница в программе.
Подробнее здесь: https://stackoverflow.com/questions/795 ... tion-but-n
Почему добавление объектов в глобальные списки работают во время инициализации объекта, но не после инициализации? ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение