打印向量时为什么隐式调用str(向量)?

时间:2015-12-06 11:46:57

标签: python vector printing maya pymel

本段以下的所有内容均来自Practical Maya Programming一书。在第二行到最后一行中,作者说print语句带参数t隐式调用str(t),我想知道原因,同样在第二个代码块中作者创建vect并将其分配给值xform.translate.get(),他是否还在继续使用t并将其分配给xform.translate.get()

>>> xform.translate
Attribute(u'pSphere1.translate')
>>> t = xform.translate.get()
>>> print t
[0.0, 0.0, 0.0]

突出显示的球体变换的平移值似乎是一个列表。它不是。转换值是pymel.core.datatypes.Vector的一个实例。有时我们需要更积极地内省对象。我认为这是PyMEL犯错误的少数领域之一。调用str(t)会返回一个看起来像是来自列表的字符串,而不是看起来像是来自Vector。确保您的类型正确。我花了几个小时来查找我使用Vector而不是列表的bug,反之亦然。

>>> vect = xform.translate.get()
>>> lst = [0.0, 0.0, 0.0]
>>> str(vect)
'[0.0, 0.0, 0.0]'
>>> str(lst)
'[0.0, 0.0, 0.0]'
>>> print t, lst # The print implicitly calls str(t)
[0.0, 0.0, 0.0] [0.0, 0.0, 0.0]

1 个答案:

答案 0 :(得分:4)

这是因为Python的数据模型。根据{{​​3}}:

  

object.__str__(self)str(object)和内置函数调用   format()print()计算“非正式”或可打印的内容   对象的字符串表示。返回值必须是字符串   对象

     

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

     

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

正如您所看到的,Python内部print(object)调用object.__str__()会返回对象的字符串表示形式。致电str(object)也会返回object.__str__()

由于这一事实,print(object)str(object)都会为您提供相同的视觉输出。