如何解决忽略 Python 中 asdict 属性的数据类
我正在使用数据类创建一个 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
这涉及更多样板文件,我希望尽可能避免。一个不完美的类比是 C# 中的模型,它可以使用 Dapper 或 EF 实例化。
解决方法
来自PEP 557:
数据类装饰器检查类以查找字段。字段定义为注释中标识的任何变量。也就是说,具有类型注释的变量。除了下面描述的两个例外,数据类机器都不会检查注释中指定的类型。
因此它是有效的 python 代码,但 _dib
类变量(或 dib 属性)不会包含在生成的比较方法中,因为 _dib
不在 __annotations__
中
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。