Python 类输出十六进制值而不是列表,不知道为什么


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输出正确的列表?

我认为您应该重写str方法来输出您想要获得的内容。

而不是

print(s1)

print(s1.s1)

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

添加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]

从有关__repr__的文档:

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

这通常用于调试,因此表示形式必须信息丰富且明确

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

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

相关内容

最新更新