4 回答

TA贡献1891条经验 获得超3个赞
默认情况下,一个类没有任何逻辑以可读的方式“表示”自己。当打印函数无法找到将对象转换为字符串的方法时,它将返回对象的内存信息。
如果您想要一个更具可读性的输出,您必须自己定义该行为。
我们以这三个类为例:
class Test:
def __init__(self, name):
self.name = name
class Test2(Test):
def __str__(self):
return self.name
class Test3(Test):
def __repr__(self):
return self.name
Test是原始类。Test2并Test3从 继承结构Test。
我们可以使用不同的类定义变量并尝试在列表中打印它们,然后分别:
var1 = Test("Abraham")
var2 = Test2("Silvia")
var3 = Test3("Charles")
var_list = [var1, var2, var3]
print(var_list) # [<__main__.Test object at 0x02BBA118>, <__main__.Test2 object at 0x02BBA370>, Charles]
print(var1) # <__main__.Test object at 0x02BBA118>
print(var2) # Silvia
print(var3) # Charles
看到列表中唯一正确表示的是var3,但是当我们将它们打印出来时,两者都var2返回var3了它们的属性name。
那是因为当在 say a 中表示变量时,list或者dict解释器尝试调用 objectsself.__repr__方法来查看如何表示它们。
但是,当尝试将对象转换为字符串时(正如 print 尝试做的那样),两者都self.__str__按self.__repr__顺序被调用。这就是为什么两者都var2可以var3正确打印出来的原因。

TA贡献1841条经验 获得超3个赞

TA贡献1829条经验 获得超4个赞
该print
函数最终需要一个字符串来写入您的屏幕。它尽最大努力将各种数据类型转换为良好的字符串表示形式,但对于您的类来说,它真的不可能知道使用什么是好的字符串。所以,最后的手段就是你所看到的:关于对象的一些细节,以及它在内存中的当前位置(显示为十六进制地址)。
添加回答
举报