Bu yazıda, kod tabanınızı Python paketlerini kullanarak temiz, verimli modüllere bölmeyi öğreneceksiniz. Ayrıca, kendi veya üçüncü taraf paketlerinizi Python programınıza aktarmayı ve kullanmayı öğreneceksiniz.
Python paket nedir?
Genellikle tüm dosyalarımızı bilgisayarımızda aynı yerde tutmayız. Daha kolay erişim için iyi organize edilmiş bir dizin hiyerarşisi kullanıyoruz.
Benzer dosyalar aynı dizinde tutulur, örneğin tüm şarkıları “müzik” dizininde tutabiliriz. Buna benzer olarak, Python’un dizinler için paketleri ve dosyalar için modülleri vardır.
Uygulama programımız çok sayıda modülle birlikte büyüdükçe, benzer modülleri tek bir pakete ve farklı modülleri farklı paketlere yerleştiriyoruz. Bu, bir projenin (programın) yönetilmesini ve kavramsal olarak açık olmasını sağlar.
Benzer şekilde, bir dizin alt dizinler ve dosyalar içerebileceğinden, bir Python paketinin alt paketleri ve modülleri olabilir.
Bir dizinin Python’un bir paket olarak kabul etmesi için __init__.py adlı bir dosya içermesi gerekir. Bu dosya boş bırakılabilir, ancak genellikle bu paketin başlatma kodunu bu dosyaya yerleştiririz.
İşte bir örnek. Bir oyun geliştirdiğimizi varsayalım, olası bir paket ve modül organizasyonu aşağıdaki şekilde gösterildiği gibi olabilir.
Modülü paketten içe aktarma
Nokta (.) Operatörünü kullanarak modülleri paketlerden alabiliriz.
Örneğin, yukarıdaki örnekte oynat modülünü içe aktarmak istiyorsanız, bu aşağıdaki gibi yapılır.
1 2 3 |
import Oyun.Seviye.Oynat |
Şimdi bu modül seviye_sec() adında bir işlev içeriyorsa, ona başvurmak için tam adı kullanmamız gerekir.
1 2 3 |
Oyun.Seviye.Oynat.seviye_sec(5) |
Bu yapı uzun görünüyorsa, modülü paket öneki olmadan aşağıdaki gibi içe aktarabiliriz.
1 2 3 |
from Oyun.Seviye import Oynat |
Şimdi fonksiyonu aşağıdaki gibi çağırabiliriz.
1 2 3 |
Oynat.seviye_sec(5) |
Yine de bir paket içinde bir modülün sadece gerekli işlev (veya sınıf veya değişken) formunu içe aktarmanın başka bir yolu aşağıdaki gibi olacaktır.
1 2 3 |
from Oyun.Seviye.Oynat import seviye_sec |
Şimdi bu işlevi doğrudan çağırabiliriz.
1 2 3 |
seviye_sec(5) |
Daha kolay olmasına rağmen, bu yöntem önerilmez. Tam ad alanını kullanmak karışıklığı önler ve aynı tanımlayıcı adlarının çarpışmasını önler.
1 Yorum