Mam katalog, w którym przechowywane są wszystkie pliki .py .
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
Chcę użyć klas z user.py i dir.py w main.py .
Jak mogę zaimportować te klasy Python do main.py ?
Ponadto, jak mogę zaimportować klasę, User
jeśli user.py znajduje się w podkatalogu?
bin/
dir.py
main.py
usr/
user.py
python
python-import
Bin Chen
źródło
źródło
Odpowiedzi:
Python 2
Utwórz pusty plik wywoływany
__init__.py
w tym samym katalogu co pliki. Będzie to oznaczać dla Pythona, że „można importować z tego katalogu”.Więc po prostu zrób ...
To samo dotyczy praw, jeśli pliki znajdują się w podkatalogu - umieść również
__init__.py
w podkatalogu, a następnie użyj zwykłych instrukcji importu, z notacją kropkową. Dla każdego poziomu katalogu należy dodać do ścieżki importu.Więc jeśli katalog zostałby nazwany „klasami”, zrobiłbyś to:
Python 3
Taki sam jak poprzedni, ale poprzedź nazwę modułu przedrostkiem,
.
jeśli nie używa podkatalogu:źródło
__init__.py
jest pusty, to cokolwiek jest, będzie dostępne po zaimportowaniu pakietu (a rzeczy, do których nie zaimportowano , nie będą w ogóle dostępne).__init__.py
__init__.py
__init__.py
w ogóle potrzebny jest plik? Jeśli włożę wszystkie trzy pliki do tego samego katalogu i uruchomięmain.py
, będzie to możliweimport
z dwóch pozostałych modułów bez niego. czego mi brakuje?__init__.py
możliwości importowania innych modułów w tym samym katalogu. W szczególnościimport
s innych modułów w tym samym katalogu, co__init__.py
sam plik, który działał w Pythonie 2.7.8, zawiódł w Pythonie 3.4.1. Aby to naprawić, musiałem poprzedzić każdą z nich nazwą podkatalogu i kropką (tj.import module
Musiałem zmienić naimport subdirectory.module
). Na szczęście po wykonaniu tej czynności nadal działało w Pythonie 2.7.8.Właśnie dowiedziałem się (dzięki komentarzowi Martineau ), że aby zaimportować klasy z plików w tym samym katalogu, piszesz teraz w Pythonie 3:
źródło
ValueError: Attempted relative import in non-package
from user import User
W twoim
main.py
:gdzie
Class
jest nazwa klasy, którą chcesz zaimportować.Jeśli chcesz wywołać metodę
Class
, możesz wywołać ją za pomocą:Class.method
Pamiętaj, że
__init__.py
w tym samym katalogu powinien znajdować się pusty plik.źródło
__init__.py
.Możesz zaimportować moduł i uzyskać dostęp poprzez jego nazwę, jeśli nie chcesz mieszać funkcji i klas z twoimi
lub możesz zaimportować funkcje i klasy do swojego kodu
możesz użyć wildchar *, aby zaimportować wszystko z tego modułu do swojego kodu
źródło
W python3 nie
__init__.py
jest już konieczne . Jeśli bieżącym katalogiem konsoli jest katalog, w którym znajduje się skrypt Pythona, wszystko działa poprawnieNie zadziała to jednak, jeśli zostanie wywołany z innego katalogu, który nie zawiera
user.py
.W takim przypadku użyj
Działa to nawet, jeśli chcesz zaimportować cały plik zamiast tylko stamtąd stamtąd.
źródło
import user
podkreślono na czerwono); zmieniono na względny import (from . import user
) i linijka już go nie oflagowała.Aby ułatwić zrozumienie:
Krok 1: przejdźmy do jednego katalogu, w którym wszystkie zostaną uwzględnione
Krok 2: Teraz możemy utworzyć plik class1.py, który ma nazwę klasy Class1 z pewnym kodem
Krok 3: Teraz stwórzmy plik class2.py, który ma nazwę klasy Class2 z pewnym kodem
Krok 4: teraz pozwala stworzyć jeden main.py, który zostanie wykonany raz, aby użyć Class1 i Class2 z 2 różnych plików
Krok 5: Uruchom program
Wynik byłby
źródło
Python 3
Podobnie
directory
.importować plik:
log.py
Klasa import:
SampleApp()
.lub
katalog jest
basic
.import do pliku:
log.py
.Klasa import:
SampleApp()
.źródło
źródło
Jeśli user.py i dir.py nie obejmują klas, to
nie działa. Następnie należy zaimportować jako
źródło
Nie jestem pewien, dlaczego to działa, ale przy użyciu kompilacji Pycharm
from file_in_same_dir import class_name
IDE narzekało na to, ale wygląda na to, że nadal działało. Używam Python 3.7
źródło
Po prostu zbyt krótko, Utwórz plik
__init__.py
to katalog klas, a następnie zaimportuj go do skryptu w następujący sposób (Importuj całą wielkość liter)Importuj tylko wybrane klasy
źródło
importować z tego samego katalogu
aby zaimportować z podkatalogu, katalog powinien zawierać
wtedy plik inny niż ty
z katalogu zaimportuj swój plik
źródło
Python3
posługiwać się
i
lubię to
źródło