【问题标题】:Python class outputting hex value instead of list, not sure why?Python 类输出十六进制值而不是列表,不知道为什么?
【发布时间】:2013-11-14 05:37:16
【问题描述】:
class SList:
    def __init__(self):
        self.s1 = ['hey']
    def take(self, item):
        self.s1 += [item]
        return self.s1
    def size(self):
        size = len(self.s1)
        return size

if __name__ == "__main__" :
    s1 = SList()
    print('hello')
    s1.take(33)
    s1.take(42)
    s1.take(55)
    s1.size()
    print(s1)
    print(s1.size())

对类不太熟悉,写这个更多是为了证明概念,所以我可以熟悉它。我似乎无法弄清楚为什么这个输出是:

hello

<__main__.SList object at 0x3323ed0>

4

hello4 是我想要的方式,但是当我需要 s1 输出时,我似乎得到了 s1 的十六进制值:['hey', 33, 42, 55]

哇 让s1 输出正确的列表?

【问题讨论】:

    标签: python list class main


    【解决方案1】:

    我认为你应该重写str方法来输出你想要得到的东西。

    【讨论】:

      【解决方案2】:

      添加reprstr 的覆盖:

      class SList:
          def __init__(self):
              self.s1 = ['hey']
      
          def take(self, item):
              self.s1 += [item]
              return self.s1
      
          def size(self):
              size = len(self.s1)
              return size
      
          def __repr__(self):
              return repr(self.s1)
      
      if __name__ == "__main__" :
          s1 = SList()
          print('hello')
          s1.take(33)
          s1.take(42)
          s1.take(55)
          s1.size()
          print(s1)
          print(s1.size())
      

      这在你的情况下就足够了:

      你好

      ['嘿', 33, 42, 55]

      4

      来自documentation关于__repr__

      由 repr() 内置函数和字符串转换(反引号)调用,以计算对象的“官方”字符串表示。如果可能的话,这应该看起来像一个有效的 Python 表达式,可用于重新创建具有相同值的对象(给定适当的环境)。如果这不可能,则应返回 <...> 形式的字符串。返回值必须是字符串对象。如果一个类定义了 repr() 而不是 str(),那么当实例的“非正式”字符串表示时也使用 repr()该类是必需的。

      这通常用于调试,因此表示信息丰富且明确是很重要的。

      为了完整起见,您还可以覆盖__str__

      由 str() 内置函数和 print 语句调用以计算对象的“非正式”字符串表示。这与 repr() 的不同之处在于它不必是有效的 Python 表达式:可以使用更方便或更简洁的表示来代替。返回值必须是字符串对象。

      【讨论】:

        【解决方案3】:

        而不是

        print(s1)
        

        使用

        print(s1.s1)
        

        在原始情况下,您正在打印 SList 类的实例对象。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-27
          • 1970-01-01
          • 2018-02-02
          • 2015-02-05
          相关资源
          最近更新 更多