You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We've implemented our own subclass of the arrow.Arrow class, to directly support pydantic serialization. This helps us in our use case, but we're having some troubles with the typing system, as (virtually) every function in the arrow.Arrow class returns -> "Arrow", meaning we have to create a wrapper for every function we want to use in our subclass.
"""Constructs an :class:`Arrow <arrow.arrow.Arrow>` object, representing "now" in the given
timezone.
:param tzinfo: (optional) a ``tzinfo`` object. Defaults to local time.
Usage::
>>> arrow.now('Asia/Baku')
<Arrow [2019-01-24T20:26:31.146412+04:00]>
"""
iftzinfoisNone:
tzinfo=dateutil_tz.tzlocal()
dt=dt_datetime.now(tzinfo)
returncls(
dt.year,
dt.month,
dt.day,
dt.hour,
dt.minute,
dt.second,
dt.microsecond,
dt.tzinfo,
fold=getattr(dt, "fold", 0),
)
By replacing these (where correct) -> "Arrow" instances with -> typing.Self, all subclasses will have their inherited functionality correctly typed automatically, instead of this having to be done via wrapper functions.
Caveats
I'm not sure there are many, but there is one:
Self wasn't introduced into the typing module until Python 3.11, meaning this might cause the support chart to look quite differently. It could, however, be possible to use typing_extensions.Self for backwards compatibility?
The text was updated successfully, but these errors were encountered:
Feature Request
We've implemented our own subclass of the
arrow.Arrow
class, to directly support pydantic serialization. This helps us in our use case, but we're having some troubles with the typing system, as (virtually) every function in thearrow.Arrow
class returns-> "Arrow"
, meaning we have to create a wrapper for every function we want to use in our subclass.Example of
-> "Arrow"
inArrow.now()
:arrow/arrow/arrow.py
Lines 185 to 214 in 87a1a77
By replacing these (where correct)
-> "Arrow"
instances with-> typing.Self
, all subclasses will have their inherited functionality correctly typed automatically, instead of this having to be done via wrapper functions.Caveats
I'm not sure there are many, but there is one:
Self
wasn't introduced into thetyping
module until Python 3.11, meaning this might cause the support chart to look quite differently. It could, however, be possible to usetyping_extensions.Self
for backwards compatibility?The text was updated successfully, but these errors were encountered: