0
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

hello并且是我想要的方式,但是当我需要输出时4,我似乎得到了一个十六进制值:s1s1['hey', 33, 42, 55]

哇要s1输出正确的列表?

4

3 回答 3

0

代替

print(s1)

利用

print(s1.s1)

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

于 2013-11-03T13:41:19.183 回答
0

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

于 2013-11-03T13:39:10.850 回答
0

repr添加或覆盖str

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

从有关的文档__repr__

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

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

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

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

于 2013-11-03T13:39:59.450 回答