Python dlaczego ta funkcja raz działa, a po imporcie nie działa

Pytania i problemy
wazer
wazer

dlaczego po zaimportowaniu datetime z datetime nie działa datetime.datetime.today() ten problem nie pojawia się przy getcwd() >>> import datetime >>> datetime.datetime.today() datetime.datetime(2020, 11, 25, 18, 31, 43, 228326) >>> from datetime import datetime >>> datetime.today() datetime.datetime(2020, 11, 25, 18, 31, 58, 838495) >>> datetime.datetime.today() Traceback (most recent call last): File "", line 1, in AttributeError: type object 'datetime.datetime' has no attribute 'datetime' >>> import os >>> os.getcwd() 'C:\Users' >>> getcwd() Traceback (most recent call last): File "", line 1, in NameError: name 'getcwd' is not defined >>> from os import getcwd >>> getcwd()

    >>> os.getcwd()
    'C:\\Users'
    >>>
Pantoflarz
Pantoflarz

Nie wiem do końca jak to poprawnie wytłumaczyć w języku polskim, gdyż przywykłem do tłumaczenia w języku angielskim, ale postaram się objaśnić co jest problemem.

Gdy importujesz datetime -

wazer:

import datetime

importujesz tzw. moduł.

Za chwilę, robiąc

wazer:

from datetime import datetime

importujesz klasę.

Więc to co Python robi to nie błąd, robi dokładnie to co mu kazałeś, a że nazwa tego co importujesz jest taka sama, to prawidłowo zwraca że obiekt nie ma atrybutu datetime.

Najprostszym fixem, w takiej sytuacji, jest zmiana nazewnictwa importów, np. możesz zrobić po prostu -

import datetime as dt

i używać modułu datetime używając zmiennej dt

a potem

from datetime import datetime

i używać klasy datetime używając zmienniej datetime

Przynajmniej tak rozumiem to co się tutaj dzieje, i sądzę że to mogłoby pomóc :slight_smile:

Po co wogóle komplikujesz sobie na tyle życie jest dla mnie zagadką, bo można po prostu nie robić import datetime from datetime i używając samego dt, kod dt.datetime.now() zwróci Ci aktualną datę i godzinę :)

wazer
wazer

Dzięki za wytłumaczenie 🙂

Pantoflarz:

import datetime as dt o tym że da się zmienić nazwę modułu nie wiedziałem

Pantoflarz:

Po co wogóle komplikujesz sobie na tyle życie jest dla mnie zagadką, bo można po prostu nie robić import datetime from datetime i używając samego dt, kod dt.datetime.now() zwróci Ci aktualną datę i godzinę Byłem ciekawy co się stanie .....

system
system

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.