gpt4 book ai didi

Python封装: overwriting variables with-in a class

转载 作者:行者123 更新时间:2023-12-01 05:11:19 25 4
gpt4 key购买 nike

背景:

  • 我使用的是 python 2.7.4
  • 我正在类里面逐行阅读文档
  • 我想在一个类中有两个变量
  • 一个变量(我将其设置为一个名为lines的数组)我想要拥有文档的所有原始格式
  • 另一个变量(我也做成了一个名为linesfixed的数组),我想去掉缩进和换行符“-”

问题:

我的 setLinesFixed() 方法由于某种原因修改了我的 lines(不需要)和 linesfixed(所需)变量...我不确定问题是什么是,但我觉得这是某种封装问题。

类中的代码:

def __init__(self):
self.lines = [] # sets up the empty array for lines without modifications
self.linesfixed = [] #sets up the empty array for lines with indentation and line wraps gone

def setLines(self,realfilename):
tempfile = open(realfilename)
self.lines = tempfile.readlines() # this sets the self.lines correctly
tempfile.close()
# print self.lines gives the desired output >> ["blah blah.. -","blah blah"]

def setLinesFixed(self,templines):
self.linesfixed = templines
index = len(self.linesfixed)-1
while index >= 0:
cleanline = self.linesfixed[index].strip()
if(cleanline == ""):
self.linesfixed.pop(index)
elif((cleanline[-1] == "-")and(cleanline[0] != ";")):
cleanline = cleanline[:-1]
temp = self.linesfixed.pop(index+1)
temp = temp.strip()
self.linesfixed[index] = cleanline + temp
else:
self.linesfixed[index] = self.linesfixed[index].strip()
index = index - 1
# print self.linesfixed gives me the desired output for fixing lines >> ["blah blah.. blah blah"]
# print self.lines gives me the same result as self.lines fixed >> ["blah blah.. blah blah"]

输入示例:

self.setLines(["blah blah.. -","blah blah"])
self.setLinesFixed(self.lines)

实际输出:

self.lines = ["blah blah.. blah blah"]
self.linesfixed = ["blah blah.. blah blah"]

所需输出:

self.lines = ["blah blah.. -","blah blah"]
self.linesfixed = ["blah blah.. blah blah"]

这里出了什么问题?为什么 self.lines 会像 self.linesfixed 一样被修改?这是封装问题吗?

最佳答案

问题是你在修改数组之前没有复制它,你只是复制了对数组的引用。此行之后:

self.linesfixed = templines

self.linesfixedtemplines 都引用同一个数组。为了获得预期的行为,您需要克隆数组:

self.linesfixed = list(templines)

关于Python封装: overwriting variables with-in a class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24172081/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com