Python:在字典中保存类对象

Python:在字典中保存类对象,python,class,object,dictionary,Python,Class,Object,Dictionary,我正在尝试将一个类对象保存到字典中 我有点像这样 class Thing: def __init__(self, symbol, age, pos): worldMap = {} self.symbol = symbol self.age = age self.pos = pos t1 = Thing('c', 2, '') t2 = .. t1.worldMap 当我尝试将t1添加到世界地图时,它不起作用。我

我正在尝试将一个类对象保存到字典中

我有点像这样

class Thing:

    def __init__(self, symbol, age, pos):

        worldMap = {}

        self.symbol = symbol
        self.age = age
        self.pos = pos


t1 = Thing('c', 2, '')
t2 = ..

t1.worldMap
当我尝试将t1添加到世界地图时,它不起作用。我错过了什么

将类对象保存到字典中,以便在数组中使用它

这没有任何意义


无论如何,为了将对象保存为字典中的键,您需要重写
\uuuuuuhash\uuuu
方法。它应该返回其成员的散列(对于类的每个实例来说是唯一的)。

worldmap是实例t1的一个属性,我想将实例添加到自身并不是您想要的


您要么创建一个包含所有类实例的全局变量世界映射,要么将其设置为静态。不过,您应该选择第一种方法,否则您的Thing类将再次保留对自身的引用。

并没有完全实现您想要实现的目标,但问题似乎是您每次都在使用新的dict。如果是这种情况,那么您只需要将dict保存到某个地方:

class Thing:
    def __init__(self, symbol, *args, **kwargs):
        # get existing dict, or create it for the first run
        worldMap = getattr(self.__class__, 'worldMap', {})
        worldMap.update(symbol, self)

        # save the dict to use it later
        self.__class__.worldMap = worldMap

t1 = Thing('c', 1, 2)
assert(t1.worldMap['c'] == t1)

是的,你是对的,我想把一个对象保存为字典中的键。我想我把世界地图放错地方了。如果我说类的东西:worldMap={}def_uuuuinit_uuu(self,symbol,age,pos,number):这样会更有意义吗?有人向我演示了如何将对象保存为字典中的键,但我尝试时它不起作用。将
worldMap
移出同一类中的
\uuuu init\uuuu
不会有太大区别。您可以像这样将其从类中移出:
worldMap={};类MyClass:uuu init_uuuu(…)
我试过了,我想我现在明白了,剩下的唯一问题是,它说“Thing”对象不可编辑好了,我想你是想把t1作为键或dict本身使用(我只是猜测,这不会引起那个特定的错误)。那是行不通的。您没有提供实际使用worldMap的示例代码,因此我假设它类似于
worldMap[t1]=“其他东西”
。为了做到这一点,你需要你的
东西
是可散列的。是的,我认为我的逻辑有问题,我对编程还不熟悉,仍然犯很多错误。我做了一个矩阵,然后我想创造一个可以在矩阵中移动的东西。“东西”对象应该有符号、年龄和位置。但是我会读更多关于类和对象的内容,我还没有完全理解。非常感谢您的帮助和时间,我真的很感激:)