Uğraştığım projelerimde genellikle yazdığım kütüphaneleri Python’un bulabilmesi bir zorluk haline geliyordu. Eğer zorluk olmasın diye tüm kütüphanelerimi aynı klasöre atarsam o zaman da büyük bir karmaşa oluyordu. Ve karşıma “__init__.py” dosyası çıktı.
“__init__” adını Nesne Tabanlı Programlama yazımdan hatırlayacaksınız, orada bizim için nesnemizin parametrelerini tutan aynı zamanda belirlemeler yaptığımız bir tür içindekiler listesiydi. Şimdi ise “__init__.py” dosyası bizim için aynı işi görecek.
Diyelim ki ben matematik hesapları yaptırdığım bir projem var. Ve kütüphanelerim şöyle:
- Kare için kare.py
- Dikdörtgen içeren dikdortgen.py
- Daire içeren daire.py
- Küp içeren kup.py
- Prizmalar içeren prizma.py
- Küre içeren kure.py
Ve biz elimizde bu tüm geometrik cisimleri 2 ve 3 boyut olmak üzere ayıralım. 2 boyutluları ikiboyut klasörüne koyalım, 3 boyutluları ucboyut klasörüne koyalım. Ve şimdi bu klasörlerin yanına “main.py”(başlangıç betiğimiz) oluşturduktan sonra dosyamızdan klasörlerden çağırmak için bu oluşturduğumuz iki klasörün içine “__init__.py” dosyayı oluşturalım ve içine hiçbir şey yazmalayalım.*
Şimdi main.py’dan “from ikiboyut.kup import *” ya da “import ucboyut.prizma as prizma” diyebiliriz. Böylece klasörlerin içinden kütüphanelerimizi rahatça çağırmış olduk.
Bu işin aynısını sys modülü ile yapabiliriz anca büyük bir karmaşa oluşabilir. Sys için ise “sys.path.append(os.getcwd()+”/ucboyut/”)” demeniz gerekiyor. Böylece başlangıç betiğiniz kütüphanelerinizi bulabilir.
Kısacası “__init__.py” ile klasörlerinizi bir kütüphane gibi düşünebilirsiniz. Kütüphanenin içindeki kütüphaneyi çağırıp, düzenli bir şekilde rahatça programınızı geliştirebilirsiniz.
Not*: Gördüğünüz üzere “__init__.py” dosyasını boş bıraktık. Eğer çok isterseniz belirlemelerinizi orada da yapabilirsiniz. “deneme = 10″ diyip, klasörün adından çağırdığınız da “import ucboyut.deneme as deneme”, “print deneme” size 10 diyerek geri dönecektir. İsterseniz nesne belirlemelerinizi de orada yapabilirsiniz.















