2009-09-29 13 views
16

Powiel możliwe:
Perl's AUTOLOAD in Python (getattr on a module)Python Auto Import

Wracam z tła PHP i próbuje dowiedzieć się Python i chcę mieć pewność, aby robić rzeczy, „Python sposób "zamiast tego, w jaki sposób opracowałem wcześniej.

Moje pytanie pochodzi z faktu, że w PHP5 możesz ustawić swój kod, więc jeśli spróbujesz wywołać klasę, która nie istnieje w przestrzeni nazw, najpierw zostanie uruchomiona funkcja, która załaduje klasę i pozwoli ci Kontynuuj, jakby był już załadowany. Zaletą tego jest to, że klasy nie zostały załadowane, chyba że zostały wywołane, a ty nie musiałeś się martwić o ładowanie klas przed ich użyciem.

W pythonie, na wyciągu importu jest dużo nacisku, czy to nie jest dobra praktyka, aby spróbować sztuczki z automatycznym importowaniem z pythonem, aby złagodzić potrzebę instrukcji import? Znalazłem this module, który oferuje automatyczne importowanie, ale nie wiem, czy to najlepszy sposób na zrobienie tego, czy też automatyczne importowanie modułów jest czymś, co jest zalecane, myśli?

+0

To jest powtórka z http://stackoverflow.com/questions/1024455/autoload-in-python –

Odpowiedz

12

Import służyć co najmniej dwa inne ważne cele oprócz wytwarzania modułów lub zawartość modułów dostępnych:

  1. Służą one jako rodzaj oświadczenia woli - „moduł ten korzysta z usług z tego innego modułu” lub "ten moduł korzysta z usług należących do określonej klasy" - np Jeśli przeprowadzasz przegląd zabezpieczeń dla kodu obsługi gniazd, możesz zacząć od analizy modułów, które importują socket (lub inne moduły związane z obsługą sieci).
  2. Imports służą jako proxy dla złożoności modułu. Jeśli znajdziesz się w kilkudziesięciu liniach importu, być może nadszedł czas, aby ponownie zastanowić się nad rozdzieleniem spraw w ramach modułu lub w ramach aplikacji jako całości. Jest to również dobry powód, aby unikać "importu" typu "from foo import *".
9

W Pythonie ludzie zwykle unikają importowania auto, tylko dlatego, że nie jest to warte wysiłku. Możesz nieznacznie usunąć koszty startowe, ale poza tym nie ma (lub nie powinno być) znaczącego efektu. Jeśli masz moduły, które są drogie do zaimportowania i robisz wiele rzeczy, których nie potrzebujesz, to przepisz ten moduł, zamiast opóźniać importowanie.

To powiedziawszy, nie ma nic z natury nie tak z automatycznym importem. Ze względu na naturę serwera proxy mogą występować pewne pułapki (na przykład podczas przeglądania rzeczy, które nie zostały jeszcze zaimportowane). Kilka bibliotek automatycznego importu jest unoszących się w pobliżu.

1

Jeśli uczysz się Pythona i chcesz robić rzeczy w stylu Pythona, po prostu zaimportuj moduły. Bardzo trudno jest znaleźć autoimport w kodzie Pythona.

1

Mogłabyś auto-import moduły, ale najbardziej ja kiedykolwiek potrzebne do importu było około 10, i to po tym, jak zostałam zaatakowana funkcje na wierzchu oryginalnego programu. Nie będziesz dużo importował, a nazwy są bardzo łatwe do zapamiętania.