Python 假设我想实现一个InsertOnlyDict,那么';实施它的最佳方式是什么?
我在想我们如何实现一个Python 假设我想实现一个InsertOnlyDict,那么';实施它的最佳方式是什么?,python,Python,我在想我们如何实现一个InsertOnlyDict,它的属性是,如果一个键已经存在,它就不能被设置为新值 实现它的一种方法是编写如下内容: class InsertOnlyDict(dict): 定义设置项(自身、键、值): 如果键入self: 提高。。。。 super(InsertOnlyDict,self)。\uuuu设置项\uuuuu(键,值) 上述方法存在的问题是,如果调用方使用dict.\uuuuu setitem\uuuuuu(x,k,v),它仍然可以更新此项 第二种方法是写 cl
InsertOnlyDict
,它的属性是,如果一个键已经存在,它就不能被设置为新值
实现它的一种方法是编写如下内容:
class InsertOnlyDict(dict):
定义设置项(自身、键、值):
如果键入self:
提高。。。。
super(InsertOnlyDict,self)。\uuuu设置项\uuuuu(键,值)
上述方法存在的问题是,如果调用方使用dict.\uuuuu setitem\uuuuuu(x,k,v)
,它仍然可以更新此项
第二种方法是写
class InsertOnlyDict(对象):
__插槽(内部插槽)
定义初始化(self,*args,**kwargs):
self._internal=dict(*args,**kwargs):
定义设置项(自身、键、值):
如果输入self.\u internal:
提高。。。。
self.\u内部[键]=值
这种方法最令人担忧的是,这种InsertOnlyDict
不再是dict
,因此可能会导致检查失败,如isinstance(x,dict)
有什么办法绕过它吗?e、 g.使一个类不真正使用父类,同时仍然通过检查,如isinstance(x,dict)
你觉得这些方法怎么样?不,如果你想使用dict,你必须接受dict可以做你不想让他们做的事情。在这种情况下,测试
isinstance(x,dict)
是不正确的,因为如果x
是dict的一个实例,那么dict方法将对它起作用。请看一看您提到的“上面的方法有一个问题,即如果调用方使用dict.setitem(x,k,v),它仍然可以更新它”。但这就是Python的哲学。您不必编写一个阻止程序员有目的地实现某些目标的解决方案。你已经阻止了非自愿的重新分配,我认为这就是你需要做的……你必须实现update()
和setdefault()
too我认为不太可能有人会在上面使用dict.\uu setitem.\uuuuuu(x,k,v)
(实际上需要类似于dict.\uu setitem.\uuuu(iod\u对象,x,k,v)
)-我也会这样做。同样,对于其他方法,也需要重写。不,如果你想使用dict,你必须接受dict可以做你不想做的事情。在这种情况下,测试isinstance(x,dict)
是不正确的,因为如果x
是dict的一个实例,那么dict方法将对它起作用。请看一看您提到的“上面的方法有一个问题,即如果调用方使用dict.setitem(x,k,v),它仍然可以更新它”。但这就是Python的哲学。您不必编写一个阻止程序员有目的地实现某些目标的解决方案。你已经阻止了非自愿的重新分配,我认为这就是你需要做的……你必须实现update()
和setdefault()
too我认为不太可能有人会在上面使用dict.\uu setitem.\uuuuuu(x,k,v)
(实际上需要类似于dict.\uu setitem.\uuuu(iod\u对象,x,k,v)
)-我也会这样做。同样,对于其他也需要重写的方法。