首页 > 解决方案 > 如果其他属性为 != 无,如何将类输出为嵌套字典并计算属性

问题描述

我想要一个具有多个属性的类。我希望它也有一种将这些属性输出为字典并跳过所有 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 很陌生,所以这对我来说都是很新的。先感谢您!

标签: pythonpython-3.xoop

解决方案


似乎不需要二传手;只需将您的条件放入吸气剂本身:

@property
def var(self):
    if self.a is not None and self.b is not None:
        return self.a + self.b

推荐阅读