Python中asdict中忽略属性的数据类

2021-12-01 10:39:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用数据类创建一个PythonTkinter MVC项目,我希望通过迭代asdict方法生成的字典(当通过控制器传递到视图时)来创建小部件;但是,有些属性我不希望包含在小部件集中。在这次编辑之前,我发布了一些类似于下面的类的内容(这是我正在进行的项目的具体内容,感谢@Prune、@Cameron\u McFee和@Brian\u McCutchon的回复)。有没有办法从asdict方法中排除属性?在下面的示例中,我不想在字典中包含“customer”

我尝试过,实验性地,包括两个字段规范——repr=False和init=False,但我猜它们不起作用,也不起作用

@dataclass
class Product:
    name: str
    description: str = field(repr=False)
    N: float = field(init=False, default=0.0)
    P: float
    K: float
    _customer = None #class variable until assigned
    self._customer # but 'self' doesn't exist in this context.

    @property
    def customer(self):
        return self._customer

    @customer.setter
    def customer(self, value):
        self._customer = value

我知道有不同的方法来构造类来实现这一点,可能是避免数据类,例如:

class Product:

    def __init__(self, name: str, description: str, N: float, P: float, K: float):
        self.name = name
        self.description = description
        self.N = N
        self.P = P
        self.K = K
        self._customer = None 

    @property
    def customer(self):
        return self._customer

    @customer.setter
    def customer(self, value):
        self._customer = value

这涉及到更多的样板,如果可能的话,我希望避免使用这些样板。一个不完美的类比是C#中的模型,可以使用Dapper或EF进行实例化