将PHP-GTK应用程序转换为Python,我需要一个尽可能像PHP数组一样工作的字典。经过搜索和尝试,我在myDict()类中对dict进行了子类化,并实现了第一个重要功能,即能够完成这项工作:
dict1 = myDict()
dict1[foo1][foo2][foo3] = 1
这是在myDict()类中实现的。
class myDict(dict) :
def __missing__(self, arg) :
self.__setitem__(arg, myDict())
return self.__getitem__(arg)
现在出现了一个问题。在PHP中,如果我试图获得一个未定义的键,它会返回Null(相当于Python中的None)。在标准的Python dict中,它会返回一个错误。不幸的是,在我的myDict字典中,它返回了一个空的myDict
toto2 = myDict()
x = toto2["a"]["b"]
print x
打印显示:{}这段代码的PHP等价物将返回Null,我需要上面的Python代码返回None作为x的值。
我还没有找到让它返回的想法。没有。因为如果__missing__
返回None,那么第二行将引发错误:NoneType是不可订阅的。
如果有人有解决这个问题的想法,我将不胜感激,几个月来我一直在寻找一个解决方案来模仿PHP 的"魔力">
假设当密钥不在时,我们可以使myDict
返回None
myDict
。然后考虑toto2["a"]["b"]
。
Python首先评估toto2["a"]
。如果"a"
不在toto2
中,则toto2["a"]
返回None。接下来,Python将评估None["b"]
并引发一个TypeError
。
因此,您想要的行为在Python中是不可能的。