3

ライブラリの1つをPython2.6と互換性のあるものにしようとしています。2.7で追加されたメソッドdatetime.timedelta.total_secondsを使用しているため、2.6で機能させるために、次のようにモンキーパッチを適用したいとtimedelta思いました。

import datetime

if not hasattr(datetime.timedelta, 'total_seconds'):

    class timedelta(datetime.timedelta):
        def total_seconds(self):
            return self.days * 86400.0 + self.seconds + self.microseconds * 1e-6

    datetime.timedelta = timedelta

timedeltaこれは実際に機能する場合があります。たとえば、変数を作成する場合、このメソッドがあります。ただし、timedelta2つの値を減算して新しいオブジェクトを作成するdatetime.datetimeと、結果のオブジェクトからメソッドが欠落します。

何が問題になっていますか?これを修正するにはどうすればよいですか?

4

1 に答える 1

3

datetimeモジュールは完全にCで書かれています。

これには、あるオブジェクトを別のオブジェクトから減算する関数が含まれますdatetime.datetime。その関数(と呼ばれる)は、元のクラス(Cで記述)であるをnew_delta()直接インスタンス化します。Pythonランドで自分のクラスにリバウンドしたことに気付くことはありません。PyDateTime_DeltaTypedatetime.timedeltadatetime.timedelta

簡単な回避策はありません。

于 2011-09-28T13:36:04.763 に答える