gpt4 book ai didi

python - 在 python 中重写类会导致旧数据

转载 作者:行者123 更新时间:2023-12-01 06:02:25 27 4
gpt4 key购买 nike

最近使用 python 2.7 遇到以下问题:我有这样的类(class):

class Comment():
def __init__(self, preComments = [], postComment = ''):
self.__preComments = preComments
self.__postComment = postComment

我多次使用这样的代码:

# self.commentQueue holds comment.Comment()
def getQueuedComment(self):
queuedComment = self.commentQueue
self.commentQueue = comment.Comment()
return queuedComment

此代码的想法是返回 Comment 实例并就地创建新实例,因此排队可能会继续。

结果很奇怪,但是每次调用第二个代码时 self.commentQueue 都会保存来自此类的所有其他实例的数据(数据是附加的而不是分配的,并且仅在列表中出现问题),但是据我了解, self.commentQueue = comment.Comment() 应该创建新的空类,空的意思是 self.__preComments = []self .__postComment = ''.

修复方法是调用 self.commentQueue = comment.Comment([], '') 而不是 self.commentQueue = comment.Comment(),但我只是不明白为什么会发生这种情况。

最佳答案

切勿使用[]作为默认参数值。该表达式仅计算一次,因此对函数的所有调用将始终使用相同的list实例。改成这样:

class Comment():
def __init__(self, preComments = None, postComment = None):
if preComments is not None:
self.__preComments = preComments
else:
self.__preComments = []
if postComments is not None:
self.__postComment = postComment
else:
self.__postComment = []

关于python - 在 python 中重写类会导致旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9634972/

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