继续从 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 作为 strrepr 但它没有用,我也试图将属性设置为变量但没有结果。

已修复:

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 中全局创建变量,以便在需要时随时随地轻松访问它们。