Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以重写{}括号在python中的作用吗?_Python_Metaprogramming - Fatal编程技术网

我可以重写{}括号在python中的作用吗?

我可以重写{}括号在python中的作用吗?,python,metaprogramming,Python,Metaprogramming,我已经创建了dict的一个子类。我想做的是能够使用括号符号为我的子类创建一个新的字典。也就是说,当我有{“key”:“value”}时,我希望它调用mydict((“key”,“value”))。这可能吗?不可能。而且有很好的理由:这会违反人们阅读代码的期望。它还可能破坏您导入的任何第三方库,这些库(合理地)期望dict文本成为标准python字典 在不需要大量额外键入的情况下修复此问题的更好方法是在自定义词典类上添加一个静态的.from方法,该方法尝试使用文本并返回自定义词典的实例 MyDic

我已经创建了dict的一个子类。我想做的是能够使用括号符号为我的子类创建一个新的字典。也就是说,当我有{“key”:“value”}时,我希望它调用mydict((“key”,“value”))。这可能吗?

不可能。而且有很好的理由:这会违反人们阅读代码的期望。它还可能破坏您导入的任何第三方库,这些库(合理地)期望dict文本成为标准python字典

在不需要大量额外键入的情况下修复此问题的更好方法是在自定义词典类上添加一个静态的
.from
方法,该方法尝试使用文本并返回自定义词典的实例

MyDict.from({
  "key": "value"
})
其中,来自的
的实现可能类似于

@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"})

如果你把它弄糟了,尽管你必须从

开始走自定义路线。没有。而且有充分的理由:这会违反人们阅读代码的期望。它还可能破坏您导入的任何第三方库,这些库(合理地)期望dict文本成为标准python字典

在不需要大量额外键入的情况下修复此问题的更好方法是在自定义词典类上添加一个静态的
.from
方法,该方法尝试使用文本并返回自定义词典的实例

MyDict.from({
  "key": "value"
})
其中,来自的
的实现可能类似于

@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"})

如果你把它弄糟了,尽管你必须从

开始走自定义路线a la
,没有。而且有充分的理由:这会违反人们阅读代码的期望。没有。有充分的理由:这将违反人们阅读代码的期望。对于具有“通常”签名的dict子类,来自
方法的
将是毫无意义的;仅仅使用构造函数也可以完成同样的工作。(对于具有不同签名的dict子类,这样的
from
方法可能没有足够的信息来构造实例,因为它缺少正常构造函数参数中的任何信息。)@user2357112经过编辑以包含您的观点。然而,在签名被修改的情况下,您只需将适当的参数添加到
from
的定义中。对于具有“通常”签名的dict子类,该
from
方法将毫无意义;仅仅使用构造函数也可以完成同样的工作。(对于具有不同签名的dict子类,这样的
from
方法可能没有足够的信息来构造实例,因为它缺少正常构造函数参数中的任何信息。)@user2357112经过编辑以包含您的观点。但是,在修改签名的情况下,您只需在
中的
定义中添加适当的参数即可。