Jestem autorami zestawu wskazówek kodowania Pythona dla zespołu około 30 programistów. Jako podstawę dla mojego dokumentu, do tej pory studiowałem Google python style guide i PEP 8 style guide i zawarłem informacje z obu.W python, jakie są plusy i minusy importowania klasy vs. importowanie modułu klasy?
Jednym z miejsc, w których przewodnik po stylach Google jest bardziej restrykcyjny niż w przypadku artykułu 8, jest import. Przewodnik Google prosi deweloperów tylko o importowanie tylko pakietów i modułów, a następnie odwołaj się do elementów w ramach bardziej kwalifikowanej nazwy. Na przykład:
from pkg import module
...
my_class = module.MyClass()
Uzasadnieniem jest to, że "źródło każdego identyfikatora jest wskazane w spójny sposób". W naszym projekcie zamierzamy organizować z pakietami dwa lub trzy poziomy głębokości, więc aby poznać pełne źródło identyfikatora, czytelnik i tak będzie musiał sprawdzić zgłoszenie importu. Chciałbym popierają ten styl importu jako „preferowanego stylu”:
from pkg.module import MyClass
...
my_class = MyClass()
IMHO, czytelność w konstrukcji Pythona takich jak listowych jest lepsze, gdy nazwy są bardziej zwięzłe.
Nie mam pojęcia, co może zrobić interpreter python za kulisami. Na przykład, czy MyClass jest teraz częścią globalnej przestrzeni nazw dla tego modułu i dla wszystkich importerów tego modułu? (To byłoby złe, mogło prowadzić do dziwnych błędów, gdyby to była prawda, byłbym zwolennikiem stylu Google'a).
Moje doświadczenie w projektowaniu pythonów jest ograniczone do około 6 miesięcy (i nie ma zbyt wielu ekspertów w naszym projekcie do konsultacji), więc chciałem uzyskać więcej informacji od społeczności. Oto niektóre elementy Ja już zbadane:
effbot - discussion on imports
stack overflow - import vs. from import
python documentation - modules
Dziękuję za odpowiedzi!
* Wszystko *, do czego można się bezpośrednio odnosić, jest globalne w module. 'MyClass' jest rzeczywiście globalnym w twoim drugim przykładzie, w pierwszym,' module' jest. –
Robię "import bla" i "vlah = blah.vlah". Ponieważ cały moduł 'blah' byłby mimo to przetwarzany, nawet gdybym zrobił' od blah import vlah' – thkang
Oprócz globalnego pytania, na które odpowiedział Martijn, czy szukałeś czegoś innego. Jeśli tak, czy możesz udzielić bardziej jednoznacznego pytania? – msw