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

emu*_*emu 5 python repr self string-formatting

假设我想调试一个带有属性的简单类myattribute.我创建一个repr这样的方法:

class SimpleClass:
  def __repr__(self):
    return "{0.myattribute}".format(self)
Run Code Online (Sandbox Code Playgroud)

感觉有点多余,所以我更喜欢format直接使用:

class SimpleClass:
  __repr__ = "{0.myattribute}".format
Run Code Online (Sandbox Code Playgroud)

......但是失败了IndexError: tuple index out of range.我理解它format不能访问self论点,但我不明白为什么.

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

Kar*_*tel 2

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

看来在 3.4 中,使用 a lambdawill 可以工作,尽管我可以发誓它在以前的版本中必须是一个真正的函数。functools.partial不管用。但无论如何你确实应该使用真实的函数。抱歉,它没有您想要的那么干。