Python:循环属性并在inp中修改它们

2024-10-04 03:29:15 发布

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

我有一个问题,我正在寻找一个Python的方式来解决它。我想这样做:

def ConvertData(self):
    for dataSet in [self.trainData, self.testData]:
        convertedDataSet = ... do_something(dataSet) ...
        dataSet = convertedDataSet

因此,我想以相同的方式转换所有类属性,而不必为每个属性复制代码。但我的做法行不通。在上面的for循环中,在最后,dataSet被正确地转换。但这自然不会被分配给self.trainData

正确的编程方法是什么

convertedDataSet = ... do_something(self.trainData) ...
self.trainData = convertedDataSet

convertedDataSet = ... do_something(self.testData) ...
self.testData = convertedDataSet

非常感谢!:)

编辑:我找到了一个带有getattrsetattr的解决方案:

def ConvertData(self):
    for attr in ["trainData", "testData"]:
        convertedDataSet = ... do_something(getattr(self, attr)) ...
        setattr(self, attr, convertedDataSet)

但我还是不喜欢。这是最好的方法还是有更好的解决方案


Tags: 方法inselffor属性def方式do
1条回答
网友
1楼 · 发布于 2024-10-04 03:29:15

你的问题与attr无关,只与list有关。例如:

numbers = [1, 2, 3]
for number in numbers:
    number = 2 * number

显然,在循环之后,numbers仍然是[1, 2, 3]

要更改列表的元素,需要使用enumerate

def ConvertData(self):
    dataSets = [self.trainData, self.testData]
    for i, dataSet in enumerate(dataSets):
        convertedDataSet = ... do_something(dataSet) ...
        dataSets[i] = convertedDataSet

相关问题 更多 >