WeakValueDictionary setdefault而不创建将不使用的默认值

我将WeakValueDictionarysetdefault一起使用,并且希望创建默认事物的实例

import weakref
my_dict = weakref.WeakValueDictionary()

# ...

# Will create an instance of MyBigFancyClass even if it's not used 
value = my_dict.setdefault('my-key',default=MyBigFancyClass())

在不使用MyBigFancyClass的情况下,如何避免创建它?

ycwb123 回答:WeakValueDictionary setdefault而不创建将不使用的默认值

您可以使用setdefault块来代替使用try/except,或者我个人更希望直接覆盖__getitem__

import weakref

class MyBigFancyClass:
    pass

class MyWeakValueDictionary(weakref.WeakValueDictionary):
    def __getitem__(self,item):
        try:
            return super().__getitem__(item)
        except KeyError:
            value = self[item] = MyBigFancyClass()
            return value

my_dict = MyWeakValueDictionary()
value = my_dict['my-key']
,

您可以避免setdefault,并使用KeyError

import weakref
my_dict = weakref.WeakValueDictionary()

# ...

try:
    value = my_dict['my-key']
except KeyError:
    value = MyBigFancyClass()
    my_dict['my-key'] = value
本文链接:https://www.f2er.com/2677915.html

大家都在问