Import

Posted on October 20th, 2024
Intermediate
...

Import merupakan proses pengambilan code dari file terpisah. Import bisa berupa module (satu file .py) maupun package (structured file .py), contoh berikut mengimport salah satu Python standard library 

>>> import math
>>> math.pi
3.141592653589793
>>>

Import module

Untuk dapat mengimport module buatan sendiri, kita akan membuat struktur file seperti ini

- cooking
-- ingredients.py
-- main.py

Dalam file ingredients.py isi sebagai berikut

def bahan_gulai_ayam():
    return ['ayam', 'santan', 'daun-daunan']

Dalam file main.py isi sebagai berikut

import ingredients
get_ingredient = ingredients.bahan_gulai_ayam()
print(get_ingredient)

Jalankan kode main.py maka hasilnya adalah

['ayam', 'santan', 'daun-daunan']

main.py bertindak sebagai file utama yang dijalankan, lalu mengimport module ingredients.py untuk mendapatkan isi dari module tersebut.
Import juga bisa di lakukan dengan syntax berikut

from ingredients import bahan_gulai_ayam
get_ingredient = bahan_gulai_ayam()
print(get_ingredient)

import diatas akan mengimport bahan_gulai_ayam secara langsung. 

Perlu diingat apabila ada module yang saling mengimport satu sama lain maka Python akan mengeluarkan exception ImportError: circular import.

Import Package

Untuk dapat mengimport package, buatlah struktur folder seperti ini

- cooking
-- ingredients.py
- main.py

Perhatikan file main.py, file tersebut terletak diluar dan package yang akan di importkan adalah cooking. 

File ingredients.py masih sama dengan sebelumnya, lanjut isi file main.py sebagai berikut

import cooking
get_ingredient = cooking.ingredients.bahan_gulai_ayam()
print(get_ingredient)

Ketika dijalankan main.py, akan terjadi error seperti ini

Traceback (most recent call last):
   ingredient = cooking.ingredients
                ^^^^^^^^^^^^^^^^^^^
AttributeError: module 'cooking' has no attribute 'ingredients'

Hal tersebut terjadi dikarenakan Python tidak bisa mencari module ingredients.py dalam folder cooking. 
Untuk membuat Python membaca subfolder menjadi package, tambahkan file __init__.py 

- cooking
-- __init__.py
-- ingredients.py
- main.py

Isi file __init__.py sebagai berikut

from .ingredients import bahan_gulai_ayam

Dengan code ingredients.py masih sama, jalankan kembali main.py maka hasilnya sebagai berikut

['ayam', 'santan', 'bawang', 'daun-daunan']

Isi dari file __init__.py juga bisa di kosongkan atau dihapus, lalu ubah cara import di main.py menjadi seperti ini

from cooking import ingredients
get_ingredient = ingredients.bahan_gulai_ayam()
print(get_ingredient)

Penggunaan from dan import memiliki output yang berbeda, apabila melakukan import package maka kita bisa mengakses keseluruhan modul di dalam package (package.module1, package.module2, dst). Sedangkan from dengan contoh from package import module1  maka kita hanya bisa mengakses module1 saja.

Perbedaan cara import ini tidak ada batasan tertentu, developer bisa bebas untuk menggunakan cara yang berbeda.

Syntax executor

Dalam Python, kita bisa menentukan code yang akan dieksekusi ketika module atau file Python tersebut secara langsung (directly) dijalankan.

Perhatikan contoh berikut, buatlah folder dan struktur file seperti ini

- Foo
-- foo.py
-- bar.py

Isi code foo.py sebagai berikut

foo = "foo"
print(foo)

Lalu isi code bar.py sebagai berikut

import foo
bar = "bar"
print(bar)

Apabila dijalankan bar.py, maka hasilnya sebagai berikut

foo
bar

Dalam bar.py, kita melakukan import foo yang berarti semua line yang ada di foo.py akan dibawa, termasuk line print(foo). Sehingga output dari bar.py terdapat foo.

Ubah isi code foo.py menjadi sebagai berikut

foo = "foo"
if __name__ == "__main__":
    print(foo)

Apabila dijalankan kembali bar.py, maka hasilnya menjadi seperti berikut

bar

Perhatikan isi code foo.py, terdapat syntax if __name__ == “__main__” yang berarti apabila foo.py di import ke module lain (bar.py) maka print(foo) tidak dijalankan. print(foo) hanya akan dijalankan ketika file foo.py dijalankan.

Referensi import bisa anda baca di sini https://docs.python.org/3/reference/import.html