【发布时间】:2017-11-05 20:23:16
【问题描述】:
我在使用这个 fifo-queue 程序时遇到了问题,我已经编写了大部分代码,如下所示:
class fifoQueue:
__L = []
def __init__(self):
self.__L = []
def __len__(self):
return len(self.__L)
def empty(self):
if len(q) == 0:
return True
else:
return False
def enqueue(self, e):
self.__L.insert(0, e)
return self.__L
def dequeue(self):
if self.empty():
self.__L = [e]
else:
return self.__L.pop()
def __str__(self):
return "'" + str(self.__L) + "'"
我遇到的问题是 __ str __(self) 函数,如果我调用 print(str(q)),我想要它用“'”返回我的列表 self.__L,但是如果我只调用 print(q) 我希望它返回列表。现在我得到了 print(q) 和 print(str(q)) 相同的输出。
(print(str(q)) returns '[31.0]'
print(q) returns '[31.0]'
而我希望它返回
str(q) returns '[31.0]' or print(str(q)) returns '[31.0]'
print(q) returns [31.0]
我有数学背景,这是我最早学习的语言之一,所以如果这是非常基础的,我深表歉意。 这是一个任务,我必须只使用 __ str __ 来完成此任务,不能创建其他函数。 任何方向都非常感谢。
【问题讨论】:
-
我相信你误解了你的任务。
-
print呼叫__str__。 -
__L = []和self.__L = []哎哟相同的变量名,但一个是类变量,另一个是实例变量... -
print(obj)和str(obj)最终都调用了obj.__str__。顺便说一句,如果您的队列为空,我认为您的dequeue方法将崩溃,因为未定义e。 -
您在属性名称前使用两个下划线有什么特别的原因吗?即:
self.__L?