Как я могу использовать `str.format` напрямую как`__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.myattribute}".format
это уже связанный метод для строкового объекта ("{0.myattribute}"
). Поэтому, когда вызывающий код пытается найти, скажем, x.__repr__
(где x
это SimpleClass
экземпляр), Python находит __repr__
атрибут SimpleClass
, но затем не может распознать его как SimpleClass
метод - протокол дескриптора не соблюдается (строковый метод не имеет __get__
атрибуты).
Похоже, что в 3.4, используя lambda
будет работать, хотя я мог поклясться, что это должно было быть реальной функцией в предыдущих версиях. functools.partial
не будет работать. Но вы все равно должны использовать настоящую функцию. Извините, это не так СУХО, как вам бы хотелось.