27
Mar

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.