【发布时间】:2021-02-19 22:30:11
【问题描述】:
我正在使用数据类创建一个 Python Tkinter MVC 项目,我想通过迭代 asdict 方法生成的字典来创建小部件(当传递给视图时,通过控制器);但是,有些属性我不希望包含在小部件集中。在此编辑之前,我发布了类似于以下课程的内容(现在更具体地针对我正在从事的项目,感谢@Prune、@Cameron_McFee 和@Brian_McCutchon 的回复)。有没有办法从 asdict 方法中排除属性?在下面的示例中,我不想在字典中包含“客户”。
我尝试了,实验性地包括两个字段规范 - 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
这涉及到更多样板文件,如果可能的话,我想避免这些样板文件。一个不完美的类比是可以使用 Dapper 或 EF 实例化的 C# 模型。
【问题讨论】:
-
你为什么要问我们它是否有效?您应该在发布之前知道,因为这是一个可测试的项目,因此超出了 Stack Overflow 的范围。 “Pythonic”是固执己见的,也是离题的,除非你能指出一个特定的技术并解释你对这一点的担忧。否则,您是在错误的网站上要求进行代码审查。
标签: python tkinter python-dataclasses