Saya memiliki direktori yang menyimpan semua file .py .
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
Saya ingin menggunakan kelas dari user.py dan dir.py di main.py .
Bagaimana saya bisa mengimpor kelas-kelas Python ini ke main.py ?
Selanjutnya, bagaimana saya bisa mengimpor kelas User
jika user.py ada di dalam sub direktori?
bin/
dir.py
main.py
usr/
user.py
python
python-import
Bin Chen
sumber
sumber
Jawaban:
Python 2
Buat file kosong yang disebut
__init__.py
di direktori yang sama dengan file. Itu akan menandakan ke Python bahwa "boleh mengimpor dari direktori ini".Maka lakukan saja ...
Hal yang sama berlaku jika file berada dalam subdirektori - beri tanda
__init__.py
dalam subdirektori, dan kemudian gunakan pernyataan impor reguler, dengan notasi titik. Untuk setiap level direktori, Anda perlu menambahkan jalur impor.Jadi, jika direktori itu bernama "kelas", maka Anda akan melakukan ini:
Python 3
Sama seperti sebelumnya, tetapi awali nama modul dengan
.
jika tidak menggunakan subdirektori:sumber
__init__.py
ini tidak kosong, maka apa yang ada di__init__.py
adalah apa yang akan tersedia ketika Anda mengimpor paket (dan hal-hal tidak diimpor ke__init__.py
tidak akan tersedia sama sekali).__init__.py
file sama sekali dibutuhkan? Jika saya meletakkan ketiga file di direktori yang sama dan menjalankannyamain.py
, itu bisaimport
dari dua modul lainnya tanpa itu. Apa yang saya lewatkan?__init__.py
dan dapat mengimpor modul lain di direktori yang sama. Khususnyaimport
modul lain dalam direktori yang sama dengan__init__.py
file itu sendiri yang bekerja di Python 2.7.8, gagal dalam Python 3.4.1. Untuk memperbaikinya saya harus mengawali masing-masing dengan nama subdirektori dan sebuah titik (yaituimport module
harus diubah menjadiimport subdirectory.module
). Untungnya itu masih berfungsi di Python 2.7.8 setelah melakukan ini.Saya baru tahu (terima kasih atas komentar martineau ) bahwa, untuk mengimpor kelas dari file dalam direktori yang sama, sekarang Anda akan menulis dengan Python 3:
sumber
ValueError: Attempted relative import in non-package
tetapi kesalahan hilang ketika saya mengubah kefrom user import User
Di Anda
main.py
:dimana
Class
nama kelas yang ingin Anda impor.Jika Anda ingin memanggil metode
Class
, Anda dapat memanggilnya menggunakan:Class.method
Perhatikan bahwa harus ada yang kosong
__init__.py
file di direktori yang sama.sumber
__init__.py
.Anda dapat mengimpor modul dan memiliki akses melalui namanya jika Anda tidak ingin mencampur fungsi dan kelas dengan milik Anda
atau Anda dapat mengimpor fungsi dan kelas ke kode Anda
Anda dapat menggunakan wildchar * untuk mengimpor semua yang ada di modul itu ke kode Anda
sumber
Dalam python3,
__init__.py
adalah tidak lagi diperlukan . Jika direktori saat ini dari konsol adalah direktori di mana skrip python berada, semuanya berfungsi dengan baikNamun, ini tidak akan berfungsi jika dipanggil dari direktori lain, yang tidak mengandung
user.py
.Dalam hal itu, gunakan
Ini berfungsi bahkan jika Anda ingin mengimpor seluruh file, bukan hanya kelas dari sana.
sumber
import user
digarisbawahi dalam warna merah); diubah ke impor relatif (from . import user
) dan linter tidak lagi menandai itu.Agar lebih mudah dipahami:
Langkah 1: mari kita pergi ke satu direktori, di mana semua akan dimasukkan
Langkah 2: sekarang mari kita membuat file class1.py yang memiliki nama kelas Class1 dengan beberapa kode
Langkah 3: sekarang mari kita membuat file class2.py yang memiliki nama class Class2 dengan beberapa kode
Langkah 4: sekarang mari kita buat satu main.py yang akan dijalankan sekali untuk menggunakan Class1 dan Class2 dari 2 file yang berbeda
Langkah 5: Jalankan program
Outputnya adalah
sumber
Python 3
Sama
directory
.mengimpor file:
log.py
kelas impor:
SampleApp()
.atau
direktori adalah
basic
.mengimpor dalam file:
log.py
.kelas impor:
SampleApp()
.sumber
sumber
Jika user.py dan dir.py tidak termasuk kelas, maka
tidak bekerja. Anda kemudian harus mengimpor sebagai
sumber
Saya tidak yakin mengapa ini bekerja tetapi menggunakan Pycharm build
from file_in_same_dir import class_name
IDE mengeluhkannya tetapi tampaknya masih berfungsi. Saya menggunakan Python 3.7
sumber
Terlalu singkat, Buat file
__init__.py
adalah direktori kelas dan kemudian impor ke skrip Anda seperti berikut (Impor semua huruf besar)Hanya mengimpor kelas yang dipilih
sumber
untuk mengimpor dari direktori yang sama
untuk mengimpor dari sub direktori, direktori harus berisi
file selain file Anda kemudian
dari direktori import your_file
sumber
Python3
menggunakan
dan
seperti itu
sumber