首页 > 解决方案 > 如何从类中打印字符串?

问题描述

我创建了一个类,它返回一个可以附加或删除输入值的字符串。

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

assert print(Stack()) == ''

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

我的班级定义如下:

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'

编辑

我怎样才能在不改变测试线的情况下完成这项工作?

标签: python-3.xpython-unittest

解决方案


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

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


推荐阅读