1

._today()で動作するオプションdatetimeとクラスコンストラクターを持つモジュールをロードします。30 秒ごとに、クラスを で再作成しdata = myModule.dataClass()ます。__init__私のクラスの は、引数として ` init ( von=_today(),bis=_today(),somemore=something)' を持っています。

スクリプトを初期化したその日は、すべてが機能します。翌日、前日のデータがロードされます。したがって、日付は更新されません。

助けてください:それは何ですか?

myModule次のようなファイルがあります。

import datetime

def _today():
# returns todays date

    todays_date = datetime.datetime.now()
    return str(todays_date.day) + '.' + str(todays_date.month) + '.' + str(todays_date.year)


class MyClass(object):

    def __init__( self, von=_today(), bis=_today(), somemore=something ):

        self.somedata = []

        self.get_data( von, bis, somemore )
        self.read_data()

さらに、データ クラスを呼び出してデータをプロットするプログラムがあります。

import aLot
import myModule

def some_plotting_routine(some_data):
    ...

def main():

    while True:

        most_recent_data = myModule.MyClass(somemore=something)
        some_plotting_routine(most_recent_data)

        matplotlib.pyplot.pause(30)

たとえば 2013 年 9 月 5 日にコードを開始すると、すべて正常に動作します。プロットは 30 秒ごとに更新されます。ただし、翌日、コードは 30 秒ごとに更新され、前日の 9 月 5 日のデータが使用されます。

実行を中断して入力myModule._today()すると、正確な現在の日付である 9 月 6 日が返されます。呼び出すmyModule.MyClass(somemore=something)と古いデータが取得され、呼び出すmyModule.MyClass(von=myModule._today(),bis=myModule._today(),somemore=something)と現在のデータが取得されます。

次の呼び出しの前に、さまざまなことを試しました。しかし、それは役に立ちません。

4

2 に答える 2

3

関数のデフォルト値は、関数が呼び出されたときではなく、関数が定義されたときに評価されます。デフォルト値は、Python がモジュールをロードした瞬間に確定されます。

代わりにセンチネル値を使用します。

def __init__( self, von=None, bis=None, somemore=something ):
    if von is None:
        von = _today()
    if bis is None:
        bis = _today()

代わりに、関数が呼び出されるたびに値が設定されるようになりました。

_today()機能も改善できることに注意してください。dateオブジェクトを作成し、date.strftime()関数を使用して日付をフォーマットします。

def _today():
    """Todays date formatted as a string"""

    todays_date = datetime.date.today()
    return todays_date.strftime('%d.%m.%Y')

これは、ゼロパディングされた数字と同じように日付を返します。あなたも使用することができます:

    return '{0.day}.{0.month}.{0.year}'.format(todays_date)

ゼロで埋められていない値を返します。デモ:

>>> import datetime
>>> adate = datetime.date(2013, 2, 14)
>>> adate.strftime('%d.%m.%Y')
'14.02.2013'
>>> '{0.day}.{0.month}.{0.year}'.format(adate)
'14.2.2013'
于 2013-09-05T11:27:51.640 に答える