如何从类中打印字符串?

时间:2019-01-30 18:08:28

标签: python-3.x python-unittest

我制作了一个返回字符串的类,该字符串可以追加或删除输入值。

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

assert print(Stack()) == ''

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

我的班级定义如下:

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'

编辑

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

2 个答案:

答案 0 :(得分:1)

执行assert str(stack) == '2 -> 1 -> 3'强制类返回其自身的字符串表示形式。

问题后编辑: 打印功能返回None,因此返回值不能用于测试。

答案 1 :(得分:0)

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