python - 使用与实例无关的单独返回变量
问题描述
我正在尝试继承 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”
解决方案
推荐阅读
- java - 如何通过索引选择随机元素?
- python - 传递参数和范围的问题,我该如何解决?
- cmake - CMake:未创建库
- ios - 如何在 Swift 中的扩展代码之前运行函数?
- javascript - 是否有内置方法以 6 位格式 YYMMDD 获取日期?
- multithreading - 在单独的线程中运行类成员函数
- python - 带有 Selenium 的应用程序不响应 - 不显示进度条,也不在控制台中发出文本,直到任务完成
- c++ - 连接时字符串 '\0' null 出错
- charts - 如何在 AMP 页面上集成 Google Charts
- hadoop - 镶木地板字符串到蜂巢中的时间戳转换