我如何直接使用`str.format`作为`__repr__`?

时间:2014-10-15 08:52:06

标签: python string-formatting self repr

假设我想调试一个带有属性myattribute的简单类。我创建了一个repr方法,如下所示:

class SimpleClass:
  def __repr__(self):
    return "{0.myattribute}".format(self)

感觉有点多余,所以我更愿意直接使用format

class SimpleClass:
  __repr__ = "{0.myattribute}".format

...但是IndexError: tuple index out of range失败了。我理解format无法访问self参数,但我不明白为什么。

我做错了什么,这是CPython限制 - 或者还有什么?

1 个答案:

答案 0 :(得分:2)

"{0.myattribute}".format已经是字符串对象("{0.myattribute}")的绑定方法。因此,当调用代码尝试查找时,例如x.__repr__(其中xSimpleClass实例),Python会找到__repr__ SimpleClass属性,但后来无法将其识别为SimpleClass方法 - 描述符协议不受尊重(字符串方法没有__get__属性)。

似乎在3.4中,使用lambda将起作用,虽然我可以发誓它必须是以前版本中的真实功能。 functools.partial无效。但无论如何你真的应该使用真正的功能。对不起,它不像你想要的那么干。