Python中的str函数:python'str()'函数调用类的'__str__()' 函数吗

关于Python中的str函数的问题,在python str method中经常遇到, 如果我用自己的__str__()函数定义一个类,则str(a)等效于a.__str__(),其中a是我的类的实例?

如果我用自己的__str__()函数定义一个类,则str(a)等效于a.__str__(),其中a是我的类的实例?

我检查了python doc,它没有明确地说这是这种情况。

27

简短答案:是的!

根据Python docs(我突出显示了相关部分):

object.__str__(self)

str (object)和内置函数 format () 和 print () 调用,以计算对象的“非正式”或可很好地打印的字符串表示形式。返回值必须是字符串对象。

此方法与object.__repr__()的不同之处在于,不期望__str__()返回有效的 Python 表达式:可以使用更方便或简洁的表示形式。

内置类型对象定义的默认实现调用object.__repr__()

所以当你做str(your_instance)时,通常会调用your_instance.__str__

更长的答案:对于“特殊方法”(具有两个前导下划线和两个尾随下划线的方法),存在异常,因为这些方法是在类而不是实例上查找的。因此str(a)实际上是type(a).__str__(a)而不是a.__str__()。但是在大多数情况下,它们是相同的,因为很少在实例上覆盖类的方法。尤其不是特殊方法。

另请参见relevant documentation on "Special method lookup"

对于自定义类,特殊方法的隐式调用只有在对象的类型上定义,而不是在对象的实例字典中定义时,才能保证正常工作。

所以像 @ zzh1996 在注释中指出的那样,的代码将使用在类上定义的方法,即使实例有一个自定义的可调用__str__属性:

>>> class A(object):
...     def __str__(self):
...         return 'a'
>>> instance = A()
>>> instance.__str__ = lambda: 'b'
>>> str(instance)
'a'
>>> instance.__str__()
'b'
3

是的。看看的例子:

>>> 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__() documentation,我们有:

object.__str__(self)

str(object)和内置函数format()print()调用,用于计算对象的“非正式”或可很好地打印的字符串表示形式。返回值必须是字符串对象。

1

是的,但也可以打印。请参阅 docshttps://docs.python.org/2/reference/datamodel.html#object.str

本站系公益性非盈利分享网址,本文来自用户投稿,不代表码文网立场,如若转载,请注明出处

(493)
上古卷轴5获取物品代码:eBay'获取库存物品' API不返回物品
上一篇
结婚程序安排表:数据在2并排表laravel
下一篇

相关推荐

发表评论

登录 后才能评论

评论列表(46条)