Warum funktioniert das Hinzufügen von Objekten zu globalen Listen während der Objektinitialisierung, jedoch nicht nach d
Posted: 10 Apr 2025, 07:56
Ich schreibe ein sehr einfaches textbasiertes Fluchtspiel, um die Grundlagen zu üben, die ich bisher gelernt habe. Ich führe es gerade in einem Online -Redakteur aus. Ich hatte Probleme, Klassenobjekte zu einer globalen Liste hinzuzufügen, und erfuhr, dass ich die Objekte initialisierte und dann die Liste anschließend hinzufügte. Nach dem Umschreiben so, dass die Objekte während ihrer Initialisierung zur Liste hinzugefügt wurden, funktionierte es. Warum? (Das Spiel ist noch nicht fertig, wie Sie sehen werden, ich möchte nur, was passiert, bevor ich fortfahre.) < /P>
Original, nicht funktioniert: < /p> und ich konnte die Liste der Liste anschließend nicht für den beabsichtigten Zweck der Liste verwenden. Dies funktionierte wie beabsichtigt. Ich verstehe einfach nicht, was der Unterschied zum Programm war.
Original, nicht funktioniert: < /p>
Code: Select all
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>
Neu, funktioniert: < /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>
Im Originalcode habe ich versucht, vorhandene Klassenobjekte zu einer globalen Liste hinzuzufügen. Ich erwartete, dass die Objekte nur in der Liste stehen würden, als hätte ich eine normale Variable hinzugefügt. Was tatsächlich passiert ist, ist diese Ausgabe, wenn die Liste aufgerufen wurde: [, ]