【问题标题】:returning a string from a class object with __str__使用 __str__ 从类对象返回一个字符串
【发布时间】: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?

标签: python string class


【解决方案1】:

__str__ 方法应该如下:

 def __str__(self):
      return str(self.__L)    # delegate to built-in function (no concatenation with quote)

或者:

def __str__(self):
    return '{self.__L !s}'.format(self.__L)    # string formatting

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-09-15
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2018-08-16
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多