Pertanyaan Bagaimana cara mengimpor kelas dalam direktori atau sub direktori yang sama?


Saya memiliki direktori yang menyimpan semua .py file.

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 Python ini ke dalam main.py?
Selanjutnya, bagaimana saya bisa mengimpor kelas User jika user.py ada di sub direktori?

bin/
    dir.py
    main.py
    usr/
        user.py

390
2017-11-10 07:32


asal


Jawaban:


Python 2

Buat file kosong bernama __init__.py di direktori yang sama dengan file. Itu akan menandakan ke Python bahwa itu "ok untuk mengimpor dari direktori ini".

Maka lakukan saja ...

from user import User
from dir import Dir

Hal yang sama berlaku jika file-file tersebut dalam subdirektori - meletakkan sebuah __init__.py di subdirektori juga, lalu gunakan pernyataan impor biasa, dengan notasi titik. Untuk setiap tingkat direktori, Anda perlu menambahkan ke jalur impor.

bin/
    main.py
    classes/
        user.py
        dir.py

Jadi jika direktori itu bernama "kelas", maka Anda akan melakukan ini:

from classes.user import User
from classes.dir import Dir

Python 3

Sama seperti sebelumnya, tetapi awali nama modul dengan . jika tidak menggunakan subdirektori:

from .user import User
from .dir import Dir

573
2017-11-10 07:36



Saya baru belajar (terima kasih komentar martineau) itu, untuk mengimpor kelas dari file dalam direktori yang sama, Anda sekarang akan menulis dengan Python 3:

from .user import User
from .dir import Dir

79
2018-02-08 10:07



Di dalam Anda main.py:

from user import Class

dimana Class adalah 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.


21
2017-11-10 07:38



Anda dapat mengimpor modul dan memiliki akses melalui namanya jika Anda tidak ingin mencampur fungsi dan kelas dengan milik Anda

import util # imports util.py

util.clean()
util.setup(4)

atau Anda dapat mengimpor fungsi dan kelas ke kode Anda

from util import clean, setup
clean()
setup(4)

Anda dapat menggunakan wildchar * untuk mengimpor semua yang ada di modul itu ke kode Anda

from util import *
clean()
setup(4)

9
2017-07-21 11:54



Untuk membuatnya lebih mudah dimengerti:

Langkah 1: mari menuju ke satu direktori, di mana semua akan dimasukkan

$ cd /var/tmp

Langkah 2: sekarang mari kita membuat file class1.py yang memiliki Class1 kelas kelas dengan beberapa kode

$ cat > class1.py <<\EOF
class Class1:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class1 OK]: " + ENDC
EOF

Langkah 3: sekarang mari kita membuat file class2.py yang memiliki Class2 class class dengan beberapa kode

$ cat > class2.py <<\EOF
class Class2:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class2 OK]: " + ENDC
EOF

Langkah 4: sekarang mari kita membuat satu main.py yang akan dijalankan sekali untuk menggunakan Class1 dan Class2 dari 2 file berbeda

$ cat > main.py <<\EOF
"""this is how we are actually calling class1.py and  from that file loading Class1"""
from class1 import Class1 
"""this is how we are actually calling class2.py and  from that file loading Class2"""
from class2 import Class2

print Class1.OK
print Class2.OK
EOF

Langkah 5: Jalankan program

$ python main.py

Outputnya akan

[Class1 OK]: 
[Class2 OK]:

9
2017-09-21 19:17



from user import User 
from dir import Dir 

3
2017-11-10 07:35



Terlalu singkat, Buat file __init__.py adalah direktori kelas dan kemudian mengimpornya ke skrip Anda seperti berikut

from classes.myscript import *

2
2018-01-26 04:00