Python’da Public, Private ve Protected Nitelikleri Anlamak

Python’da Erişim Belirleyicileri

Python, nesne yönelimli programlama dillerinin sunduğu temel özellikleri destekler ve bunların başında erişim belirleyicileri gelir. Public, private ve protected gibi üç erişim belirleyici, bir sınıfın niteliklerine ve metodlarına erişimi kontrol eden önemli yapılar olarak karşımıza çıkar. Bu erişim belirleyiciler, bir sınıfta tutulan verinin gizliliğini koruma, kapsülleme sağlama ve yazılımın bakımını kolaylaştırma amacı taşır. Bu makalede, Python’da bu erişim belirleyicilerin ne anlama geldiğini, nasıl çalıştığını ve kullanım konularını detaylı bir şekilde inceleyeceğiz.

Public Nitelikler

Public (açık) nitelikler bir sınıf tanımı içerisinde tanımlandığında, bu niteliklere ve metodlara sınıf dışından herkes erişim sağlayabilir. Python’da, public nitelikler için özel bir gösterim yoktur; değişken veya metod ismi yazıldığında varsayılan olarak public kabul edilir. Örneğin, bir sınıf oluşturduğumuzda tanımladığımız tüm nitelikler ve metodalar otomatik olarak public olarak değerlendirilecek ve dışarıdan erişilebilir olacaktır.

Public niteliklerin sağladığı açık erişim, kullanıcıların bir nesneyle etkileşim kurmalarını ve özelliklerini doğrudan değiştirmelerini sağlar. Ancak dikkatli kullanılmadığında, programın beklenmedik şekillerde çalışmasına veya hatalara yol açabilen yanlış yapılandırmalara neden olabilir. Bu nedenle, public niteliklerin nerelerde ve nasıl kullanılacağını iyi bilmek gerekir. Aşağıda, public niteliklerin bir kullanım örneği verilmiştir:

class Kullanici:
    def __init__(self, isim):
        self.isim = isim  # Public nitelik

kullanici1 = Kullanici("Ege")
print(kullanici1.isim)

Private Nitelikler

Private (özel) nitelikler, bir sınıf içerisinde yalnızca o sınıfın metotları tarafından erişime açık olan niteliklerdir. Python’da özel nitelikler tanımlamak için nitelik adının önüne iki tane alt çizgi (__) koyarak yapılır. Bu uygulama, niteliklerin adlarının ‘adı mangling’ olarak adlandırılan bir mekanizmaya tabi tutulmasına neden olur. Böylece dışarıdan erişilmeye çalışıldığında, bu nitelikler adının değiştirilmesi yoluyla korunmuş olur.

Örneğin, bir sınıf içinde gizli bir nitelik tanımlarsanız, bu niteliğe doğrudan sınıfın dışından erişemezsiniz. Bunun yerine, o sınıf içinde tanımladığınız metodlar kullanılarak erişim sağlanması beklenir. Private nitelikler, veri gizliliği ve kapsülleme açısından önemli bir yer tutar, çünkü kullanım dışı bırakılan bu veriler ile nesne durumunu kontrol altında tutarak dışarıdan müdahalelere karşı koruma sağlar. Aşağıdaki örnekte gösterildiği üzere, private nitelikleri kullanabiliriz:

class Banka:
    def __init__(self):
        self.__bakiye = 0  # Private nitelik

    def para_yatir(self, miktar):
        self.__bakiye += miktar

    def bakiye_gor(self):
        return self.__bakiye

banka = Banka()
banka.para_yatir(100)
print(banka.bakiye_gor())  # 100

Protected Nitelikler

Protected (korunan) nitelikler, bir sınıf içinde tanımlandığında, o sınıf ve ondan türetilen alt sınıflar tarafından erişilebilen niteliklerdir. Python’da protected nitelikler tanımlamak için nitelik adının önüne tek bir alt çizgi (_) koyulur. Bununla birlikte, protected nitelikler, doğrudan sınıf dışından erişimi tamamen engellemez; ancak bu tür niteliklerin dışarıdan erişiminde dikkatli olunması gerektiği anlamına gelir.

Protected nitelikler genellikle bir sınıfın içinde kullanılacak ve alt sınıflar bu verilere erişim sağlayarak genişletilmiş işlevsellik sunacaktır. Bu yapı sayesinde, nesne yönelimli programlamanın kalpbileşenlerinden biri olan kalıtım özelliklerinden etkin şekilde yararlanabiliriz. Aşağıdaki örnekte bir protected nitelik kullanımına örnek verilebilir:

class Hayvan:
    def __init__(self):
        self._tur = "Hayvan"  # Protected nitelik

class Kedi(Hayvan):
    def __init__(self):
        super().__init__()
        print(f"Bu bir {self._tur}dır.")

kedi = Kedi()

Hangi Durumda Hangi Erişim Belirleyicisini Kullanmalıyız?

Hangi erişim belirleyicisinin kullanılacağı, tasarım sürecinde belirli gereksinimlere ve senaryolara bağlıdır. Public nitelikler, objenin dışarıdan erişimini ve etkileşimini sağlamak için kullanılırken, private nitelikler belirli verilerin gizli kalmasını ve yalnızca sınıf içerisinden erişim sağlamayı tercih eder. Protected nitelikler ise kalıtım yoluyla erişim sağlar ve alt sınıflar için özelleştirilmiş işlevsellik sunar.

Dolaşım konusunda ise, public nitelikler genellikle una yönelimli tasarımın temelini atar ve dış kütüphanelerle etkileşimi artırır. Private nitelikler, kodunuzu daha güvenli hale getirirken, protected nitelikler ise esnekliği arttırır. Bu nedenle, seçim sürecinde projenizin ihtiyaçlarına göre en uygun olanı seçmeniz önerilir.

Hedeflenen kullanıcı grubu ve bütçeniz de, hangi erişim belirleyicisini kullanacağınızı etkileyebilir. Yeni başlayanlar genellikle public nitelikleri kullanma konusunda rahat hissedebilirken, daha deneyimli geliştiriciler private ve protected nitelikler ile proje tasarlayabiliyorlar. Projenizin karmaşıklığı arttıkça, gizlilik vazgeçilmez bir unsur haline gelir.

Sonuç

Python’da public, protected ve private erişim belirleyicileri, programlamada sürdürülebilirlik, güvenlik ve verimlilik sağlamak için kritik öneme sahiptir. Bu erişim türlerinin her birinin kendi kullanım senaryoları ve avantajları vardır. Sınıflar arası bir yaklaşım geliştirirken doğru belirleyici seçmek, kodun daha okunabilir, anlaşılır ve bakım kolaylığı olan bir yapı sunmasına yardımcı olur.

Bu yazıda ele aldığımız konular doğrultusunda, Python hatırlatmalarınızı yaptıktan sonra projelerinizde farklı erişim belirleyicileri kullanmayı deneyebilirsiniz. Geliştirme sürecinizde bu kavramlara hakim olmak, nesne yönelimli programlama bilgilerinizi güçlendirecek ve kod yazma becerinizi geliştirecektir. Gelecek yazılarımda bu konuları daha da derinlemesine incelemeye devam edeceğim. Python dünyasının sunduğu zenginlikleri keşfetmek için nostaljik bir yolculuğa hazır olun!

Scroll to Top