如何创建一个包含变量的数据结构,使得当变量被重新定义时,该数据结构也会更新?
我正在制作一个文本冒险游戏,使用命名元组来定义地点。Location = namedtuple('Location', ['desc', 'ldesc', 'func', 'dirloc'])
entrance = foyer = None
entrance = Location('地牢入口', (
'你现在在一片小树林的小空地上。'
'北面可见一扇大的镶铁门,嵌在小山上,小山突起于空地的中心。'
'阳光照耀在你身上,鸟儿在歌唱。'), None,
{'north':foyer, 'south':None, 'east':None, 'west':None, 'up':None, 'down':None})
foyer = Location('门厅', ('你现在在一个中等大小的石头房间里。'
'四面八方都刻有壁龛。'
'一条通道向西延伸,另一条向北延伸。'
'地面上的脚印通向西通道。'),
None,
{'north':None, 'south':entrance, 'east':None, 'west':None, 'up':None, 'down':None})
当 foyer 的 Location 被重新赋值时,我需要在 entrance 的字典 dictloc 中自动更新 foyer 变量。
我该怎么做?我已经在互联网上搜索了很多文章,但没有找到相关的内容。 您可以使用函数或类来解决这个问题。下面是一种使用类的解决方案:
创建一个 LocationManager 类,用于管理所有位置。在该类中,创建一个字典,用于存储所有位置及其名称。
当您重新定义 foyer 变量时,只需调用 LocationManager 类中的 update_location() 方法即可自动更新字典中的 foyer 位置。
以下是一个示例代码:
from collections import namedtuple
class LocationManager:
def __init__(self):
self.locations = {}
def add_location(self, name, desc, ldesc, func, dirloc):
location = namedtuple('Location', ['desc', 'ldesc', 'func', 'dirloc'])(desc, ldesc, func, dirloc)
self.locations = location
def update_location(self, name, desc, ldesc, func, dirloc):
if name in self.locations:
location = namedtuple('Location', ['desc', 'ldesc', 'func', 'dirloc'])(desc, ldesc, func, dirloc)
self.locations = location
# 创建一个 LocationManager 实例
lm = LocationManager()
# 添加 foyer 和 entrance 位置
lm.add_location('foyer', '门厅', ('你现在在一个中等大小的石头房间里。'
'四面八方都刻有壁龛。'
'一条通道向西延伸,另一条向北延伸。'
'地面上的脚印通向西通道。'), None,
{'north':None, 'south':'entrance', 'east':None, 'west':None, 'up':None, 'down':None})
lm.add_location('entrance', '地牢入口', (
'你现在在一片小树林的小空地上。'
'北面可见一扇大的镶铁门,嵌在小山上,小山突起于空地的中心。'
'阳光照耀在你身上,鸟儿在歌唱。'), None,
{'north':'foyer', 'south':None, 'east':None, 'west':None, 'up':None, 'down':None})
# 重新定义 foyer 位置
lm.update_location('foyer', '新门厅', ('这是新门厅的描述'), None,
{'north':None, 'south':'entrance', 'east':None, 'west':None, 'up':None, 'down':None})
# 现在 foyer 的描述已经更新了,可以打印查看
print(lm.locations['foyer'].desc)
输出结果:
新门厅
页:
[1]