1. ホーム
  2. python

[解決済み] "import datetime" v.s. "from datetime import datetime".

2022-03-05 04:14:27

質問

スクリプト内の異なる行で以下を実行する必要があるスクリプトがあります。

today_date = datetime.date.today()
date_time = datetime.strp(date_time_string, '%Y-%m-%d %H:%M')

私の import の文は、私は次のようになります。

from datetime import datetime
import datetime

以下のようなエラーが発生します。

AttributeError: 'module' object has no attribute 'strp'

の順番を変えると import の文に変更します。

import datetime
from datetime import datetime

以下のようなエラーが発生します。

AttributeError: 'method_descriptor' object has no attribute 'today'

を再度変更すると import という文に変更します。

import datetime

以下のようなエラーが発生します。

AttributeError: 'module' object has no attribute 'strp'

何が起こっているのか、どうすれば両方が機能するようになるのか?

どのように解決するのですか?

あなたの悩みは、いくつかのコードで datetime への参照であることを示します。 datetime モジュール を期待している他のコードと datetime への参照であることを示します。 datetime クラスがあります。 明らかに、両方はありえない。

するとき。

from datetime import datetime
import datetime

最初に設定するのは datetime をクラスへの参照にした後、すぐにそれをモジュールへの参照にします。その逆をやると、同じことですが、結局はクラスへの参照になります。

これらのリファレンスのうち1つの名前を変更する必要があります。 例えば

import datetime as dt
from datetime import datetime

そして、フォーム内の参照を変更することができます datetime.xxxx を参照しているモジュールは dt.xxxx .

または、単に import datetime で、すべての参照をモジュール名で行うように変更します。 言い換えれば、もし何かが単に datetime(...) に変更する必要があります。 datetime.datetime .

Pythonのライブラリには、残念ながらこの手のものが結構あります。で自分たちの命名ガイドラインに従えば PEP 8 を使用すると、その datetime という名前のクラスになります。 Datetime の両方を使っても問題はありません。 datetime を意味するモジュールと Datetime はクラスを意味します。