我正在创建一个文本冒险引擎,该引擎本身运行良好,但是我试图通过回调为游戏创建者实现自定义事件。我有一个main.py
文件,该文件实现了所有游戏对象并构建了游戏。问题是实例化实例后,似乎无法访问它们。看一下这个伪示例代码,
import engine
def build():
# create new item objects
key = engine.Item()
door = engine.Item(a = 0)
# set state of door
door.locked(requirement = key)
# CALLBACK FUNCTION
def on_door_unlock():
# ACCESSING THE ATTRIBUTE `a` IN `door` WORKS FINE
door.a = 1
# ACCESSING THE `key` OBJECT THROWS UnboundLocalError
del key
# assign callback to unlock event
door.on_unlock(on_door_unlock)
build()
engine.run()
我的文件显然比此文件大得多,但它非常简单,并且此代码隔离了我的问题。我可以访问任何对象的属性,但是当我尝试在对象本身上使用del关键字时,我得到UnboundLocalError: local variable 'key' referenced before assignment
一切似乎都井井有条。那是什么问题呢? 我该如何编写可以访问我创建的对象实例的回调函数?
答案 0 :(得分:1)
del key
的含义不超过“从 local 范围中删除名称key
”。但是,从未将此符号带入on_door_unlock
的本地范围,即使将其删除,也不会对build
的范围产生任何影响。
许多更好的方法之一是创建一个显式命名的对象注册表,例如,创建为名为dict
的{{1}}。在其中创建all_objects
。通过在函数中按名称引用将其key
删除。
key