5

假设我想调试一个带有属性的简单类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 的限制——还是别的什么?

4

1 回答 1

2

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

似乎在 3.4 中,使用lambdawill 可以工作,尽管我可以发誓它在以前的版本中必须是一个真正的函数。functools.partial不管用。但是无论如何,您确实应该使用真正的功能。抱歉,它不像您想要的那样干燥。

于 2014-10-15T09:23:52.673 回答