如何从 Class 中打印字符串?
How to print a string out of a Class?
我制作了一个 class returns 一个可以追加或删除输入值的字符串。
如果堆栈 class 为空,我必须通过以下断言通过测试:
assert print(Stack()) == ''
我尝试使用 str 和 repr,但没有成功。
我的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 值不能用于测试。
我制作了一个 class returns 一个可以追加或删除输入值的字符串。
如果堆栈 class 为空,我必须通过以下断言通过测试:
assert print(Stack()) == ''
我尝试使用 str 和 repr,但没有成功。
我的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 值不能用于测试。