python - 如果其他属性为 != 无,如何将类输出为嵌套字典并计算属性
问题描述
我想要一个具有多个属性的类。我希望它也有一种将这些属性输出为字典并跳过所有 None 值的方法。同样在一个完美的场景中,我希望这个 dict 是嵌套的,但首先要做的是:
class MyClass():
def __init__(self, a=False, b=None, c=None, ...):
self.a = a
self.b = b
self.c = c
...
@property
def dictionary(self):
dictionary = { k:v for k, v in self.__dict__.items() if v != None }
return dictionary
这很好用,但是问题是当尝试在字典中包含 self.a + self.b 的结果时,如果 != None 。唯一的__dict__
输出值是__init__
. 我试图通过使用附加属性然后使用 setter 来解决这个问题:
class MyClass():
def __init__(self, a=False, b=None, c=None, ... , _var=None):
self.a = a
self.b = b
self.c = c
...
self.var = None
@property
def _var(self):
_var = None
return self.var
@_var.setter
def _var(self):
if self.a & self.b != None:
self.var = self.a + self.b
return self.var
@property
def dictionary(self):
dictionary = { k:v for k, v in self.__dict__.items() if v != None }
return dictionary
不幸的是,当我创建实例时,这并没有初始化。它甚至可以完成吗?我想我看错了,但不知何故__dict__
似乎是正确的方法。我对 OOP 很陌生,所以这对我来说都是很新的。先感谢您!
解决方案
似乎不需要二传手;只需将您的条件放入吸气剂本身:
@property
def var(self):
if self.a is not None and self.b is not None:
return self.a + self.b
推荐阅读
- javascript - dojo 框架中的转轮
- gdb - 如何使 gdb 仅列出调试程序中断时正在执行的线程?
- matlab - CPLEX 错误 5002:%s 不是凸的 - 二进制公式的最小二乘问题
- java - org.springframework.dao.InvalidDataAccessApiUsageException:给定的字符串值:[]无法转换为Json对象
- jquery - 动态添加和删除多个文本框
- javascript - 单击按钮时隐藏 div 并显示 div
- ios - 复制数组中的项目,然后在 swift 中仅在 tableview 中显示每个项目
- python - 为什么未定义 NameError 名称“my_input_value”(Python 2.7)
- php - 在 GitHub 上的 repo 上保存服务器凭据:建议
- arrays - Laravel 合并数组,其中 id 相同