首页 > 解决方案 > 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 下执行一些裸代码即可将这些默认值更改为我需要的值,但我的印象是这会被认为是一个丑陋的解决方案,我不想让任何阅读我的代码的人生病。那么我可以/应该做什么?

标签: pythonattributespython-dataclasses

解决方案


推荐阅读