私はdatetime.datetimeクラスをサブクラス化してカレンダーベースの操作を追加しようとしています。特に、週末や祝日を調整しながら、アンカー日付から日/週/月/年を加算/減算することができます。同じクラスの多くのインスタンスで繰り返しデータを避ける
はここでメソッドをカバーする必要があり抜粋です:
import datetime
import dateutil
class DateTime(datetime.datetime):
def add_workdays(cls, n = 1):
x = 1
while x <= n:
cls += dateutil.relativedelta.relativedelta(days=1)
if cls.weekday() > 4:
x = x
else:
x += 1
return DateTime(cls.year, cls.month, cls.day, cls.hour, cls.minute,
cls.second, cls.microsecond)
このメソッドは自明で現在の日付に(週末のみを占める)営業日のn加算して、結果を返します。
銀行の休日の訂正を達成するために、銀行休暇を含む配列を渡すだけで済みます(セッターメソッドまたは__new__
メソッドをオーバーライドすることにより)メソッドに応じて調整します。しかし、この問題は、例えば、時系列データを考慮する場合に発生します。この場合、各datetimeオブジェクトには配列のコピーが含まれていることになりますが、これは長い時系列データに対してメモリ使用量をかなり高くする可能性があります。
私の質問はこうです:洗練されたPythonプログラマはこれをどのように扱うでしょうか?私はbizdaysパッケージがこれを達成する方法を見てきましたが、同じ「欠点」に苦しんでいるようです。
他の言語では、休日の配列のインスタンスを1つだけ指し示すことができましたが、私の(確かにまばらな)Pythonの知識には、これは不可能です。日付を文字列として格納し、必要なときにのみDateTimeに変換する方が簡単ですか?
非常に興味深い、私はこれが財産だったことを知りませんでしたPythonのしかし、私は複数の国の休日に対処しなければならない場合、これはどのように機能しますか?私はちょうどXMLファイルから動的に休日の配列をロードしようとした後、 "is"ロジックを使って実証したテストを実行しましたが、同じ配列を渡してもfalseを返しました(self/clsとあなた自身のことではありません)。 –