我可以覆盖 {} 括号在 python 中的作用吗?
Can I override what {} brackets do in python?
我已经按照这个 question 创建了一个 dict 的子类。我想做的是能够通过使用括号表示法为我的子类创建一个新字典。也就是说,当我有 {"key":"value"} 时,我希望它调用 mydict(("key","value"))。这可能吗?
没有。并且有充分的理由:它会违反阅读代码的人的期望。它还可能会破坏您导入的任何第三方库,这些库(合理地)期望 dict 文字是标准 python 词典。
无需大量额外输入即可解决此问题的更好方法是简单地在您的自定义字典 class 上添加一个静态 .from
方法,该方法尝试使用文字和 returns 一个您的自定义词典的实例。
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 正确地指出,只要字典构造函数的签名与您的自定义签名相同,您就可以使用构造函数 class:
some_instance = MyDict({"key": "value"})
如果你搞砸了,你将不得不走自定义路线 from
。
我已经按照这个 question 创建了一个 dict 的子类。我想做的是能够通过使用括号表示法为我的子类创建一个新字典。也就是说,当我有 {"key":"value"} 时,我希望它调用 mydict(("key","value"))。这可能吗?
没有。并且有充分的理由:它会违反阅读代码的人的期望。它还可能会破坏您导入的任何第三方库,这些库(合理地)期望 dict 文字是标准 python 词典。
无需大量额外输入即可解决此问题的更好方法是简单地在您的自定义字典 class 上添加一个静态 .from
方法,该方法尝试使用文字和 returns 一个您的自定义词典的实例。
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 正确地指出,只要字典构造函数的签名与您的自定义签名相同,您就可以使用构造函数 class:
some_instance = MyDict({"key": "value"})
如果你搞砸了,你将不得不走自定义路线 from
。