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
是我想要的方式,但是当我需要s1
输出时,我似乎得到了s1
的十六进制值:['hey', 33, 42, 55]
哇让s1
输出正确的列表?
我认为您应该重写str
方法来输出您想要获得的内容。
而不是
print(s1)
用
print(s1.s1)
与原始情况一样,您正在打印 SList 类的实例对象。
添加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]
四
从有关__repr__
的文档:
由 repr() 内置函数和字符串转换(反引号)调用,以计算对象的"官方"字符串表示形式。如果可能的话,这应该看起来像一个有效的 Python 表达式,可用于重新创建具有相同值的对象(给定适当的环境)。如果无法做到这一点,则形式的字符串<...一些有用的描述...>应退回。返回值必须是字符串对象。如果一个类定义了 repr() 而不是 str(),那么当需要该类实例的"非正式"字符串表示时,也会使用 repr()。
这通常用于调试,因此表示形式必须信息丰富且明确
。
为了完整起见,您还可以覆盖__str__
:
由 str() 内置函数和 print 语句调用,以计算对象的"非正式"字符串表示形式。这与 repr() 的不同之处在于它不必是有效的 Python 表达式:可以使用更方便或简洁的表示形式来代替。返回值必须是字符串对象。