0

attr.ibreprbool または 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')

ここで何が欠けていますか?

4

1 に答える 1