If I define a class with its own __str__()
function, is str(a)
equivalent to a.__str__()
, where a
is an instance of my class?
我检查了 python 文档,它没有明确说明是这种情况。
原文由 nos 发布,翻译遵循 CC BY-SA 4.0 许可协议
是的,它确实。看看下面的例子:
>>> class A:
... def __init__(self, a):
... self.a = a
... def __str__(self):
... print "Inside __str__"
... return self.a
...
>>>
>>> a = A('obj1')
>>> a
<__main__.A instance at 0x0000000002605548>
>>>
>>> a.__str__()
Inside __str__
'obj1'
>>>
>>> str(a)
Inside __str__
'obj1'
并且,从 __str__()
文档,我们有:
object.__str__(self)
由
str(object)
和内置函数format()
和print()
以计算“非正式字符串”或可打印对象的表示形式。返回值必须是字符串对象。原文由 ettanany 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.1k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
1 回答2.8k 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
简短的回答: 是的!
根据 Python 文档(我突出显示了相关部分):
所以
your_instance.__str__
通常在您执行str(your_instance)
时调用。更长的答案:对于“特殊方法”(带有两个前导下划线和两个尾随下划线的方法)有一个例外,因为它们是在类而不是实例中查找的。所以
str(a)
实际上是type(a).__str__(a)
而不是a.__str__()
。但在大多数情况下,它们是相同的,因为很少有人会在实例上覆盖类的方法。尤其不是特殊方法。另请参阅 有关“特殊方法查找”的相关文档:
所以就像 @zzh1996 在评论中指出的那样,即使实例具有自定义可调用
__str__
属性,以下代码也将使用类上定义的方法: