-1

将 PHP-GTK 应用程序转换为 Python,我需要一个尽可能接近 PHP 数组的字典。经过搜索和尝试,我将 dict 子类化为 myDict() 类,并实现了第一个重要功能,即能够进行这项工作:

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 字典中,它会返回一个错误。在我的 myDict 字典中,不幸的是它返回一个空的 myDict

toto2 = myDict()
x = toto2["a"]["b"]
print x

打印显示:{} 此代码的 PHP 等效项将返回 Null,我需要上面的 Python 代码返回 None 作为 x 的值。

我还没有找到让它返回 None 的想法。因为如果__missing__返回 None,那么第二行会引发一个错误:NoneType 是不可订阅的。

如果有人有解决这个问题的想法,我将不胜感激,有几个月我正在寻找一种解决方案来模拟 PHP 的这种“魔力”

4

1 回答 1

1

假设我们可以在键不在时 myDict返回。然后考虑。NonemyDicttoto2["a"]["b"]

Python 首先评估toto2["a"]. 如果"a"不在toto2toto2["a"]返回无。接下来 Python 将评估None["b"]并引发一个TypeError.

所以你想要的行为在 Python 中是不可能的。

于 2012-11-29T19:49:36.207 回答