Python 3'te Modüller Nasıl Yazılır
Giriş
Python modülleri Python kodundan oluşan .py
dosyalarıdır. Herhangi bir Python dosyasına modül olarak başvurulabilir.
Bazı modüller Python Standart Kütüphanesi (Python Standard Library) aracılığıyla sağlanır ve bu nedenle Python yüklemenizle birlikte gelir. Diğer modüller ise Python’un paket yöneticisi pip
ile kurulabilir. Ayrıca, modüller Python .py
dosyalarından oluştuğu için kendi Python modüllerinizi de oluşturabilirsiniz.
Bu eğitim, diğer programlama dosyalarında kullanılmak üzere Python modülleri yazma konusunda size rehberlik edecektir.
Modül Yazma ve İçe Aktarma
Bir modül yazmak, herhangi bir Python dosyası yazmak gibidir. Modüller, diğer Python programlarında kullanılabilecek fonksiyonlar (functions), sınıfların (classes) ve değişkenlerin (variables) tanımlarını içerebilir.
Bilgi: Bu eğitimdeki örnek kodları takip etmek için, sisteminizde python3
komutunu çalıştırarak bir Python etkileşimli kabuğu (interactive shell) açın. Ardından, örnekleri >>>
isteminden sonra ekleyerek kopyalayabilir, yapıştırabilir veya düzenleyebilirsiniz.
Python 3 yerel programlama ortamımızda veya sunucu tabanlı programlama ortamımızda, daha sonra başka bir dosyaya aktaracağımız hello.py
adlı bir dosya oluşturarak başlayalım.
Başlangıç olarak, Merhaba, Dünya!
yazdıran bir fonksiyon oluşturacağız:
hello.py
# Bir fonksiyon tanımla
def world():
print("Merhaba, Dünya!")
Komut satırında python hello.py
komutuyla programı çalıştırırsak, programa bir şey yapması gerektiğini söylemediğimiz için hiçbir şey olmayacaktır.
Yeni oluşturduğumuz modülü içe aktarabileceğimiz ve fonksiyonu çağırabileceğimiz aynı dizinde main_program.py
adlı ikinci bir dosya oluşturalım. Bu dosyanın aynı dizinde olması gereklidir, böylece Python modülü nerede bulacağını bilir çünkü bu yerleşik bir modül değildir.
main_program.py
# hello modülünü içe aktar
import hello
# fonksiyonu çağır
hello.world()
Bir modül içe aktardığımız için, fonksiyonu modül adını nokta gösterimi ile belirterek çağırmamız gerekir.
Alternatif olarak, modülü from hello import world
olarak içe aktarabilir ve fonksiyonu doğrudan world()
olarak çağırabiliriz. Bu yöntem hakkında daha fazla bilgi edinmek için modülleri içe aktarırken from … import
kullanma hakkında okuyabilirsiniz.
Şimdi, komut satırında programı çalıştırabiliriz:
$ python main_program.py
Yaptığımızda, aşağıdaki çıktıyı alacağız:
Çıktı:
Merhaba, Dünya!
Bir modülde değişkenleri nasıl kullanabileceğimizi görmek için, hello.py
dosyamıza bir değişken tanımı ekleyelim:
hello.py
# Bir fonksiyon tanımla
def world():
print("Merhaba, Dünya!")
# Bir değişken tanımla
shark = "Tolga"
Ardından, main_program.py
dosyamızda print()
fonksiyonu içinde değişkeni çağıracağız:
main_program.py
# hello modülünü içe aktar
import hello
# fonksiyonu çağır
hello.world()
# Değişkeni yazdır
print(hello.shark)
Programı tekrar çalıştırdığımızda, aşağıdaki çıktıyı alacağız:
Çıktı:
Merhaba, Dünya!
Tolga
Son olarak, hello.py
dosyasında bir sınıf (class) tanımlayalım. Ahtapot
adlı bir sınıf oluşturacağız; bu sınıf name
ve color
adlı özniteliklere sahip olacak ve çağrıldığında bu öznitelikleri yazdıracak bir fonksiyon içerecek.
hello.py
# Bir fonksiyon tanımla
def world():
print("Merhaba, Dünya!")
# Bir değişken tanımla
shark = "Tolga"
# Bir sınıf tanımla
class Ahtapot:
def __init__(self, name, color):
self.color = color
self.name = name
def tell_me_about_the_Ahtapot(self):
print("Bu ahtapot " + self.color + " rengindedir.")
print(self.name + " ahtapotun adıdır.")
Şimdi sınıfı main_program.py
dosyamızın sonuna ekleyelim:
main_program.py
# hello modülünü içe aktar
import hello
# fonksiyonu çağır
hello.world()
# Değişkeni yazdır
print(hello.shark)
# Sınıfı çağır
deniz = hello.Ahtapot("deniz", "turuncu")
deniz.tell_me_about_the_Ahtapot()
Bir kez hello.Ahtapot()
ile Ahtapot
sınıfını çağırdığımızda, sınıfın fonksiyonlerine ve özniteliklerine main_program.py
dosyasının isim alanı içinde erişebiliriz. Bu sayede son satırda hello
ifadesini çağırmadan deniz.tell_me_about_the_Ahtapot()
yazabiliriz. Ayrıca, örneğin sınıfın özniteliklerinden biri olan deniz.color
ifadesini hello
modül adını belirtmeden de çağırabiliriz.
Programı çalıştırdığımızda şu çıktıyı alacağız:
Çıktı:
Merhaba, Dünya!
Tolga
Bu ahtapot turuncu renkte.
deniz, ahtapotun adıdır.
Modüllerin genellikle tanımlar olduğunu unutmamak önemlidir, ancak aynı zamanda kod da çalıştırabilirler. Bu çalışmanın nasıl olduğunu görmek için hello.py
dosyamızı world()
fonksiyonuni çalıştıracak şekilde yeniden yazalım:
hello.py
# Bir fonksiyon tanımla
def world():
print("Merhaba, Dünya!")
# Modül içinde fonksiyonu çağır
world()
Dosyadaki diğer tanımları da sildik.
Şimdi main_program.py
dosyamızda, içe aktarma ifadesi dışında her satırı silelim:
main_program.py
# hello modülünü içe aktar
import hello
main_program.py
dosyasını çalıştırdığımızda şu çıktıyı alacağız:
Çıktı :
Merhaba, Dünya!
Bu, hello
modülünün world()
fonksiyonuni uygulaması ve bunun main_program.py
'ye aktarılması ve main_program.py
çalıştığında çalıştırılması nedeniyle olur.
Bir modül, diğer Python program dosyalarında kullanılabilecek tanımlamalar veya kod içeren bir Python program dosyasıdır.
Başka Bir Dizin’den Modüllere Erişme
Modüller birden fazla programlama projesi için yararlı olabilir ve bu durumda, modülü belirli bir projeye bağlı bir dizinde tutmak mantıklı olmaz.
Ana programınızın bulunduğu dizin dışında bir konumdan bir Python modülü kullanmak istiyorsanız, birkaç seçeneğiniz vardır.
Yolları Eklemek
Bir seçenek, modülün yolunu, o modülü kullanan program dosyaları aracılığıyla çağırmaktır. Bu, modülü sistem genelinde kullanılabilir hale getirmediğinden, geliştirme süreci sırasında yapılabilecek daha geçici bir çözüm olarak düşünülmelidir.
Bir modülün yolunu başka bir program dosyasına eklemek için sys
modülünü ana program dosyanızda kullanmak istediğiniz diğer modüllerle birlikte içe aktararak başlayacaksınız.
sys
modülü, Python Standart Kütüphanesi'nin bir parçasıdır ve programınızda kullanabileceğiniz sistemle ilgili parametreler ve fonksiyonler sağlar; böylece uygulamak istediğiniz modülün yolunu ayarlayabilirsiniz.
Örneğin, hello.py
dosyasını taşıdığımızı ve artık /usr/Tolga/
yolunda olduğunu, main_program.py
dosyasının ise başka bir dizinde olduğunu varsayalım.
main_program.py
dosyamızda, sys
modülünü içe aktararak ve ardından Python'un dosyaları kontrol ettiği yola /usr/Tolga/
ekleyerek hello
modülünü yine de içe aktarabiliriz.
main_program.py
import sys
sys.path.append('/usr/Tolga/')
import hello
...
hello.py
dosyasının yolunu doğru ayarladığınız sürece, main_program.py
dosyasını hatasız çalıştırabilir ve hello.py
aynı dizinde olduğunda olduğu gibi aynı çıktıyı alabilirsiniz.
Modülü Python Yoluna Eklemek
İkinci bir seçenek olarak, modülü Python'un modülleri ve paketleri kontrol ettiği yola ekleyebilirsiniz. Bu, modülü ortam veya sistem genelinde kullanılabilir hale getiren daha kalıcı bir çözüm olup, bu yöntemi daha taşınabilir kılar.
Python'un hangi yolları kontrol ettiğini öğrenmek için, programlama ortamınızdan Python yorumlayıcısını çalıştırın:
$ python3
Ardından sys
modülünü içe aktarın:
>>> import sys
Daha sonra Python'un sistem yolunu yazdırmasını sağlayın:
print(sys.path)
Burada en az bir sistem yolu olan bir çıktı alacaksınız. Bir programlama ortamındaysanız, birkaç tane alabilirsiniz. Şu anda kullandığınız ortamdaki yola bakmak isteyebilirsiniz, ancak modülü ana sistem Python yolunuza eklemek de isteyebilirsiniz. Aradığınız şey buna benzer bir şey olacaktır:
Çıktı :
'/usr/Tolga/my_env/lib/python3.5/site-packages'
Artık hello.py
dosyanızı bu dizine taşıyabilirsiniz. İşlem tamamlandıktan sonra hello
modülünü her zamanki gibi içe aktarabilirsiniz:
main_program.py
import hello
...
Programınızı çalıştırdığınızda, hatasız bir şekilde tamamlanmalıdır.
Modülünüzün yolunu değiştirmek, hangi dizinde olursanız olun modüle erişebilmenizi sağlar. Bu, özellikle belirli bir modüle başvuran birden fazla projeniz varsa yararlıdır.
Sonuç
Bir Python modülü yazmak, diğer herhangi bir Python .py
dosyasını yazmakla aynıdır. Bu eğitim, bir modülde tanımlar yazmayı, bu tanımlardan başka bir Python program dosyasında yararlanmayı ve modüle erişmek için modülü nerede tutacağınıza dair seçenekleri kapsadı.
Lisa Tagliaferri tarafından yazılan How To Write Modules in Python 3 a Programming makalesinin düzenlenmiş çevirisi
Daha Fazla Oku:
- Sonraki Makale: Python 3'te Koşullu İfadeler Nasıl Yazılır
- Önceki Makale: Python 3'te Modül Nasıl İçe Aktarılır