我可以覆盖python中的{}括号吗?

时间:2018-11-01 17:15:39

标签: python metaprogramming

我根据此question创建了dict的子类。我想做的是能够使用方括号表示法创建子类的新字典。即,当我有{“ key”:“ value”}时,我希望它调用mydict((“” key“,” value“)))。这可能吗?

1 个答案:

答案 0 :(得分:4)

不。并且有充分的理由:这将违反人们阅读代码的期望。可能还会破坏您导入的任何第三方库,这些库会(合理地)期望dict文字是标准的python词典。

一种无需大量额外输入即可解决此问题的更好方法是,在您的自定义词典类上简单地添加一个静态.from方法,该方法会尝试使用文字并返回自定义词典的实例。

MyDict.from({
  "key": "value"
})

from的实现可能类似于

@classmethod
def from(cls, dictionary):
    new_inst = cls()
    for key, value of dictionary.items():
        new_inst[key] = value

    return newInst

根据评论进行编辑:

user2357112正确地指出,只要dict构造函数的签名与您的自定义类相同,您就可以使用该构造函数:

some_instance = MyDict({"key": "value"})

如果您已经搞砸了,尽管必须按照from的自定义路线进行操作。