为了可读性,我想有一个行为完全像一个字典(但带有一个有意义的类型,而不是更一般的字典式)的自定义类:自定义类是一个字典,但初始化没有字典拷贝?
class Derivatives(dict):
"Dictionary that represents the derivatives."
现在,有建筑的一种方式这个类的新对象的方式不涉及副本?其实天真使用
derivs = Derivatives({var: 1}) # var is a Python object
创建复制作为参数,这是我想避免的,为了提高效率,通过字典。
我试图绕过副本,但随后类字典内无法改变,在CPython的:
class Derivatives(dict):
def __new__(cls, init_dict):
init_dict.__class__ = cls # Fails with __class__ assignment: only for heap types
return init_dict
我想有两个给一个明确的类名字典的能力的程序操纵和构建这种字典的有效方式(而不是被迫复制Python字典)。这在Python中可以有效地实现吗? PS:用例可能是100,000个单键密钥Derivatives
,其中密钥是一个变量(不是字符串,所以没有关键字初始化)。这实际上并不慢,所以这里的“效率原因”意味着更多像“优雅”这样的东西:当不需要副本时,理想情况下不需要浪费时间做副本。因此,在这个特殊情况下,问题更多的是Python可以带来的优雅/清晰度,而不是运行速度。
为什么不只是'derivs = Derivatives(x = 1)'?香草词典('dict({'x':1})'')会出现同样的复制行为,但您不清楚为什么您会这么做。 – jonrsharpe
好点,但我不能,因为这些键实际上是Python对象。我会更新这个例子。 – EOL
然后不,没有办法提供你自己的文字。如果你不需要它*是一个字典,你可以让它包含*一个字典,并通过'__getitem__'等公开它 – jonrsharpe