attr.ib
repr
bool または callableの引数を取ります。
属性値のフォーマット方法をオーバーライドするには、単一の値を取り、文字列を返す callable を渡します。結果の文字列はそのまま使用されることに注意してください。つまり、呼び出しの代わりに直接使用され
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 docs の例を少し変更したものを次に示します。
>>> @attr.s
... class C(object):
... user = attr.ib()
... password = attr.ib(repr=lambda value: value[:2])
...
>>> C("me", "s3kr3t")
C(user='me', password='s3kr3t')
ここで何が欠けていますか?