attr.ib
принимает аргумент repr
, который может быть логическим или вызываемым.
Чтобы переопределить форматирование значения атрибута, передайте вызываемый, который принимаетодиночное значение и возвращает строку. Обратите внимание, что полученная строка используется как есть, то есть она будет использоваться напрямую вместо вызова repr()
(по умолчанию).
Это не относится к случаю при передаче datetime.datetime.fromisoformat()
:
import datetime
import attr
@attr.s
class Test(object):
foo: str = attr.ib()
dt: datetime.datetime = attr.ib(repr=datetime.datetime.isoformat)
Результат:
>>> t = Test(foo='bar', dt=datetime.datetime.utcnow())
>>> t
Test(foo='bar', dt=datetime.datetime(2019, 10, 31, 17, 59, 34, 603971))
Ожидается:
Test(foo='bar', dt='2019-10-31T17:59:34.603971')
Фактически, похоже, что любой параметр игнорируется. Вот небольшая модификация примера из документации по attr:
>>> @attr.s
... class C(object):
... user = attr.ib()
... password = attr.ib(repr=lambda value: value[:2])
...
>>> C("me", "s3kr3t")
C(user='me', password='s3kr3t')
Что мне здесь не хватает?