继续从 class 列表中的项目中获取 ID
Keep getting the ID from items in a list which is in a class
class EditorState:
def __init__(self, content):
self.content = content
class Editor:
def __init__(self):
self.content = ""
def __str__(self):
return f'{self.content}'
def setContent(self, value):
self.content = value
def createContent(self):
return EditorState(self.content)
def restore(self, new_value):
self.content = new_value
def getcontent(self):
return self.content
class History:
def __init__(self):
self.history = []
def __repr__(self):
return self.history
def push(self, value):
self.history.append(value)
def remove(self):
my_list = self.history
my_list.pop()
last_index = my_list[-1]
return last_index
def getvalue(self):
my_list = self.history
return self.history
editor = Editor()
history = History()
editor.setContent("a")
history.push(editor.createContent())
editor.setContent("b")
history.push(editor.createContent())
editor.setContent("c")
history.push(editor.createContent())
editor.setContent("D")
history.push(editor.createContent())
editor.restore(history.remove())
print(history.getvalue())
print(editor.getcontent())
当我检查列表中的项目时得到的输出:[<main.EditorState object at 0x0000017B77360040>, <main .EditorState 对象位于 0x0000017B773600D0>,<main.EditorState 对象位于 0x0000017B77360130>]
我想要的输出:[a,b,c]
我已经在 java 中学习了如何使用 Memento 模式,我想尝试使用 python 中的模式。我确实工作了,但问题是当我从历史列表 class 中返回最后一项时,它一直向我显示它的 ID 而不是值。当我使用 getvalue() 方法打印列表时也是如此。
我尝试使用魔法方法 sush 作为 str 或 repr 但它没有用,我也试图将属性设置为变量但没有结果。
已修复:
class EditorState:
#change here
def returnContent(self,content):
return content
class Editor():
content = '' #change here
def __init__(self):
self.content = ""
def __str__(self):
return f'{self.content}'
def setContent(self, value):
self.content = value
def createContent(self):
return EditorState.returnContent(self,self.content) #Change here
def restore(self, new_value):
self.content = new_value
def getcontent(self):
return self.content
class History:
history = [] #change here
def __init__(self):
self.history = []
def __repr__(self):
return self.history
def push(self, value):
self.history.append(value)
def remove(self):
my_list = self.history
my_list.pop()
last_index = my_list[-1]
return last_index
def getvalue(self):
my_list = self.history
return my_list
editor = Editor()
history = History()
editor.setContent("a")
history.push(editor.createContent())
editor.setContent("b")
history.push(editor.createContent())
editor.setContent("c")
history.push(editor.createContent())
editor.setContent("D")
history.push(editor.createContent())
editor.restore(history.remove())
print(history.history) #change here
print(editor.getcontent())
输出:
此函数(在下面的第二张图片中)return编辑了 class 的对象而不是变量,因为 init() 函数 return 只有 empty/None 数据类型(这是一个规则,箭头标记显示正在 returned 的数据类型),所以它基本上 returned 一个被推入列表的对象
这里可以看到init()return什么都没有
在这里你可以看到什么数据类型被推入列表
也可以尝试在 class 中全局创建变量,以便在需要时随时随地轻松访问它们。
class EditorState:
def __init__(self, content):
self.content = content
class Editor:
def __init__(self):
self.content = ""
def __str__(self):
return f'{self.content}'
def setContent(self, value):
self.content = value
def createContent(self):
return EditorState(self.content)
def restore(self, new_value):
self.content = new_value
def getcontent(self):
return self.content
class History:
def __init__(self):
self.history = []
def __repr__(self):
return self.history
def push(self, value):
self.history.append(value)
def remove(self):
my_list = self.history
my_list.pop()
last_index = my_list[-1]
return last_index
def getvalue(self):
my_list = self.history
return self.history
editor = Editor()
history = History()
editor.setContent("a")
history.push(editor.createContent())
editor.setContent("b")
history.push(editor.createContent())
editor.setContent("c")
history.push(editor.createContent())
editor.setContent("D")
history.push(editor.createContent())
editor.restore(history.remove())
print(history.getvalue())
print(editor.getcontent())
当我检查列表中的项目时得到的输出:[<main.EditorState object at 0x0000017B77360040>, <main .EditorState 对象位于 0x0000017B773600D0>,<main.EditorState 对象位于 0x0000017B77360130>]
我想要的输出:[a,b,c]
我已经在 java 中学习了如何使用 Memento 模式,我想尝试使用 python 中的模式。我确实工作了,但问题是当我从历史列表 class 中返回最后一项时,它一直向我显示它的 ID 而不是值。当我使用 getvalue() 方法打印列表时也是如此。
我尝试使用魔法方法 sush 作为 str 或 repr 但它没有用,我也试图将属性设置为变量但没有结果。
已修复:
class EditorState: #change here def returnContent(self,content): return content class Editor(): content = '' #change here def __init__(self): self.content = "" def __str__(self): return f'{self.content}' def setContent(self, value): self.content = value def createContent(self): return EditorState.returnContent(self,self.content) #Change here def restore(self, new_value): self.content = new_value def getcontent(self): return self.content class History: history = [] #change here def __init__(self): self.history = [] def __repr__(self): return self.history def push(self, value): self.history.append(value) def remove(self): my_list = self.history my_list.pop() last_index = my_list[-1] return last_index def getvalue(self): my_list = self.history return my_list editor = Editor() history = History() editor.setContent("a") history.push(editor.createContent()) editor.setContent("b") history.push(editor.createContent()) editor.setContent("c") history.push(editor.createContent()) editor.setContent("D") history.push(editor.createContent()) editor.restore(history.remove()) print(history.history) #change here print(editor.getcontent())
输出:
此函数(在下面的第二张图片中)return编辑了 class 的对象而不是变量,因为 init() 函数 return 只有 empty/None 数据类型(这是一个规则,箭头标记显示正在 returned 的数据类型),所以它基本上 returned 一个被推入列表的对象
这里可以看到init()return什么都没有
在这里你可以看到什么数据类型被推入列表
也可以尝试在 class 中全局创建变量,以便在需要时随时随地轻松访问它们。