有没有内置(或非常简单)的方法让python字典以与deque类似的方式工作.
我需要它具有最大大小,并且当添加新密钥时,如果达到最大长度,则删除首先添加的密钥.作为自定义类实现起来应该不会太难,但总是首选使用内置类.
我正在使用Python 3.6,如果有任何帮助.
我目前正在开发一个软件,其中我有从字典生成的类实例。这些字典文件的结构方式如下:
layer_dict = {
"layer_type": "Conv2D",
"name": "conv1",
"kernel_size": 3,
...
}
Run Code Online (Sandbox Code Playgroud)
然后,运行以下代码
def create_layer(layer_dict):
LayerType = getattr(layers, layer_dict['layer_type']
del layer_dict['layer_type']
return LayerType(**layer_dict)
Run Code Online (Sandbox Code Playgroud)
现在,我想支持创建新的图层类型(通过对BaseLayer
类进行子类化)。我已经想到了几种方法来做到这一点,并认为我会问哪种方法最好,为什么我没有太多开发软件的经验(在 comp bio 中完成硕士学位)。
方法1:元类
我想到的第一个方法是有一个元类,它注册BaseLayer
一个dict中的每个子类,并对该dict做一个简单的查找,而不是使用getattr。
class MetaLayer(type)
layers = {}
def __init__(cls, name, bases, dct):
if name in MetaLayer.layers:
raise ValueError('Cannot have more than one layer with the same name')
MetaLayer.layers[name] = cls
Run Code Online (Sandbox Code Playgroud)
好处:元类可以确保没有两个类具有相同的名称。在创建新层时,用户不需要考虑除子类之外的任何事情。
缺点:元类难以理解并且经常被人反对
方法二:遍历__subclasses__
树
我想到的第二种方法是使用__subclassess__
of的函数BaseLayer
来获取所有子类的列表,然后使用Layer.__name__
as 键和Layer
值创建一个 dict 。请参阅下面的示例代码: …