如何从 Class 中打印字符串?

How to print a string out of a Class?

我制作了一个 class returns 一个可以追加或删除输入值的字符串。

如果堆栈 class 为空,我必须通过以下断言通过测试:

assert print(Stack()) == ''

我尝试使用 strrepr,但没有成功。

我的class定义如下:

class Stack:
    def __init__(self):
        self.data = ''
        self.final_value = ''

    def __repr__(self):
        for i in range(self.size()):
            if i == 0:
                self.final_value += str(self.data[i])
            else:
                self.final_value += ' -> ' + str(self.data[i])
        return str(self.final_value)

    def __len__(self):
        return len(self.data)

    def is_empty(self):
        if len(self.data) == 0:
            return True
        else:
            return False

    def push(self, value_to_add):
        if type(value_to_add) is int or type(value_to_add) is str:
            self.data = str(value_to_add) + self.data
        elif callable(value_to_add):
            self.data = 'F' + self.data
        elif type(value_to_add) is dict:
            self.data = 'D' + self.data
        elif type(value_to_add) is list:
            self.data = 'L' + self.data
        elif value_to_add is None:
            self.data = 'N' + self.data
        return self.data

    def add(self, value_to_add):
        if type(value_to_add) is int or type(value_to_add) is str:
            self.data = str(value_to_add) + self.data
        elif callable(value_to_add):
            self.data = 'F' + self.data
        elif type(value_to_add) is dict:
            self.data = 'D' + self.data
        elif type(value_to_add) is list:
            self.data = 'L' + self.data
        elif value_to_add is None:
            self.data = 'N' + self.data
        return self.data

    def pop(self):
        if self.is_empty():
            raise StackPopException
        else:
            value_to_pop = self.data[0]
            self.data = self.data[1:]
        return int(value_to_pop)

    def size(self):
        return len(self.data)


StackPopException = ValueError

当我 运行 以下测试时,由于返回值的类型,我的代码失败了:

stack = Stack()

stack.push(3)
stack.push(1)
stack.push(2)

assert print(stack) == '2 -> 1 -> 3'

编辑

如何在不更改测试线的情况下使它工作?

尝试 assert repr(stack) == "'2 -> 1 -> 3'"(注意引号的确切用法)。

assert str(stack) == '2 -> 1 -> 3' 强制 class 到 return 本身的字符串表示。

问题编辑后: 打印函数 returns None 所以 return 值不能用于测试。