Python 重写`\uu setitem ``和`\uu getitem的正确方法__`

Python 重写`\uu setitem ``和`\uu getitem的正确方法__`,python,dictionary,Python,Dictionary,我试图将dict子类化,但似乎无法使其工作: 类缓存管理器(dict): 定义初始化(self,*args): dict.\uuuu init\uuuu(self,args) self.log=“” @财产 def长度(自身): 返回len(self) @静力学方法 def do_日志(消息:str): now=datetime.utcnow().strftime(“%d-%b%H-%M-%S”) template=f“[{now}]{message}\n” 返回模板 定义设置项(自身、键、值)

我试图将dict子类化,但似乎无法使其工作:

类缓存管理器(dict):
定义初始化(self,*args):
dict.\uuuu init\uuuu(self,args)
self.log=“”
@财产
def长度(自身):
返回len(self)
@静力学方法
def do_日志(消息:str):
now=datetime.utcnow().strftime(“%d-%b%H-%M-%S”)
template=f“[{now}]{message}\n”
返回模板
定义设置项(自身、键、值):
self.log+=self.do_log(f“SET`{key}`with value`{value}`”)
返回指令。设置项(键,值)
def _u获取项目(自身,密钥):
self.log+=self.do_log(f“GET`{key}`with value`{self.\uu getitem\uuuu(key)}`'))
返回dict.\uuu getitem\uuuu(键)
cache=CacheManager()
缓存[“键”]=“值”
缓存[“键”]
然而,这返回:
TypeError:描述符“\uuuu setitem\uuuuuuuuuu”需要一个“dict”对象,但收到了一个“str”


我认为这与self.log有关,但有没有办法做到这一点而不出错?

您忘记将
self
传递给
dict.\uuuuu setitem\uuuu
。你可以含蓄地这样做

super().__setitem__(key, value)
或者明确地

dict.__setitem__(self, key, value)

这同样适用于
\uuu getitem\uuu

考虑是否确实需要将
dict
子类化,或者使用组合(通过将dict封装为属性
self.d={}
)就足够了。谢谢!这就解决了问题。