我将对类任务的调用存储在.dat文件的数组中。我想阅读这个文件并重建类调用。你知道吗
下面是我现在使用的类:
class Task:
def __init__(self, name, timespent):
self.name = name
self.timespent = timespent
def __repr__(self):
return repr('Task("%s",%s)'%(self.name, self.timespent))
以下是对文件的读取:
task_list = []
with open("task_list2.dat", "r") as file:
task_list = eval(file.readline())
以下是写入文件的步骤:
with open("task_list2.dat", "w") as outFile:
print(repr(task_list), file = outFile)
文件内容如下:
['Task("class",20)']
其中“class”是任务的名称。你知道吗
我知道这个问题与“Task(“class”,20)”周围的单引号有关,但我不知道如何去掉它们。我收到的错误消息大致是这样的:“str object没有属性'name'”
如何删除这些引号,以便在下次读取文件时重建类?你知道吗
You really, really, really don't want to try to use ^{} and ^{} as a serialization format.
如果你只是使用,比如说,^{} ,你就不会有这个问题了:
简单多了,是吗?你知道吗
但是如果你想知道如何解决眼前的问题,而不是让它变得无关紧要:你的
__repr__
方法中有多个问题,如果你想让它是圆形的,所有这些问题都需要解决。你知道吗repr
。您希望返回字符串表示,而不是字符串表示的字符串表示。只需省略repr
。你知道吗repr
,而不是str
。如果您使用的是%
-格式,那就意味着使用%r
而不是%s
。你知道吗下面是如何为这个类编写一个可折叠的圆形repr:
您可以验证它是否符合您的要求:
当然,在您的特定示例中,只要解决第一个问题(删除对
repr
的虚假调用)就可以去掉单引号,并使特定示例正常工作。您也可以在读取端通过调用eval
两次来解决这个问题。或者,对于这个特定的示例,甚至通过调用eval(s[1:-1])
或eval(s.strip("'"))
。但是任何像这样的“修复”只会使调试一般问题变得更加困难,一旦你有了这些问题,你就会遇到这些问题,例如,一个名字并不像一个单一的ASCII字母单词那么简单。你知道吗相关问题 更多 >
编程相关推荐