python - Python:为每个对象添加一个以唯一方式依赖于其他属性的数据类对象属性
问题描述
在解释我的问题之前,我将给出示例代码,它是我正在使用的极其简化的版本:
from dataclasses import dataclass
@dataclass
class Input:
# attributes unimportant here
@classmethod
def from_stdin(cls):
return cls(something made from user inputs)
@dataclass
class Thing:
thing_att_1: list # data type is unimportant here
list_1, list_2 = some list, some other list
class Sys:
def __init__(self, input):
self.input = input
self.thing_1 = Thing(list_1)
self.thing_2 = Thing(list_2)
@classmethod
def from_stdin(cls):
return cls(Input.from_stdin())
def calculate_list_1_alt(self):
list_1_alt = do something with self.input and self.thing_1.thing_att_1
return list_1_alt
def calculate_list_2_alt(self):
list_2_alt = do something different with self.input and self.thing_2.thing_att_1
return list_2_alt
if __name__ == ‘__main__’:
Sys = Sys.from_stdin()
所以这是我的问题:我想为 Thing 对象设置第二个属性,比如 thing_att_2,这取决于 thing_att_1 和用户输入,但是如何对于每个 Thing 对象,这取决于它们会有所不同。Sys 类下的计算函数返回我想要的第二个属性。在初始化 Thing 对象时,我不能简单地将这些计算函数插入其中,因为这些函数引用了尚未完成初始化的对象的属性。我可以创建另一个数据类来分别包含这些属性,但我不喜欢这样,因为它们确实是 Thing 对象的属性(你只需要相信我),而且它需要下游的代码更笨重。或者,我可以使用 thing_att_2 的某种默认值制作数据类 Thing,然后只需在 name==main 下执行一些裸代码即可将这些默认值更改为我需要的值,但我的印象是这会被认为是一个丑陋的解决方案,我不想让任何阅读我的代码的人生病。那么我可以/应该做什么?
解决方案
推荐阅读
- asp.net - Gridview ItemTemplate 与数据库数据的 If 条件
- html - Bootstrap-4 卡片响应式图像/文本列重叠
- file-extension - 为什么 id_rsa.pub 文件是 .pub 文件?
- c++ - MFC:为什么它不能根据参数类型选择正确的函数?
- react-native - React-Native : useState 更新数组内的对象
- neo4j - 我在 neo4j 的数据集中有一个特定的属性键。如何找到特定属性键的所有不同标签?
- c# - C# - 获取项目中文件的路径 - 构建后
- flutter - 如何处置 ChangeNotifierProvider
Flutter 中的 .value() - c - 使用归并排序对结构数组进行排序
- python - 如何在父类中创建子类的对象?