首页 > 解决方案 > 使用与实例无关的单独返回变量

问题描述

我正在尝试继承 Python Class dict 来修改其功能。我希望它在密钥不存在时返回一个自行确定的值(即覆盖get而不是返回 None)。我可以使用以下代码段来做到这一点,但有一个问题:

class xDict(dict):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.__dict__ = self
        self.out = 0

    def reap(self, qw): #instead of *dict.get()*
        if qw not in self.keys(): return self.out
        else: return self.get(qw)
        
    def modify(self, qw):
        self.out = qw

l = xDict({'c':2,'x':1})

当我调用时l,它包含与实例关联的“out”变量:{'c': 2, 'x': 1, 'out': 0}

我想避免将其包含在字典中-可能吗?

我还尝试使用类变量解决方案:

class xDict(dict):
    #class variable
    out = 0
    
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.__dict__ = self

    def reap(self, qw):
        if qw not in self.keys(): return xDict.out
        else: return self.get(qw)

    @classmethod #class method
    def set_out(cls, x): #USE cls (equivalent to self)
        cls.out = x

l1 = xDict({'c':2,'x':1})
l2 = xDict({'r':2, 'd':2})

但是在这里我不能为每个实例设置单独的返回值。例如:l1.set_out("NA")导致对 l2 的任何请求也返回“NA”

标签: pythonclassinheritanceinstanceself

解决方案


推荐阅读