Ana içeriğe geç

Python'da İç Sınıflar

Bu temel Python eğitiminde, iç sınıfları neden ve ne zaman kullanmanız gerektiğini öğreneceksiniz.
· 5 dk. oku

Yapay Zeka ile Keşfedin

Muhtemelen iç içe fonksiyonları Python’da duymuşsunuzdur. Bunun ne anlama geldiğini biliyorsanız, iç/iç içe sınıfları anlamak zor olmayacaktır. Burada İç ya da İç İçe sınıflarla ilgili bazı yeni şeyleri inceleyeceğiz.

1. İç ya da İç İçe Sınıflar

İç ya da İç İçe Sınıf, başka bir sınıfın içinde tanımlanır. İç ya da iç içe sınıfların yapısına bakın.

## outer class
class Outer:

    ## inner class
    class Inner:
        pass

        ## multilevel inner class
        class InnerInner:
            pass

    ## another inner class
    class _Inner:
        pass

    ## ...

    pass

Bu eğitimdeki kodu çevrimiçi olarak çalıştırın ve düzenleyin

Kodu çalıştır

2. Neden İç Sınıflar?

  1. İki ya da daha fazla sınıfın gruplandırılması. Diyelim ki Car ve Engine adında iki sınıfınız var. Her Car bir Enginee ihtiyaç duyar. Ancak, Engine bir Car olmadan kullanılmaz. Bu nedenle, Engine’i Car’ın iç sınıfı yaparsınız. Bu, kodu sadeleştirmeye yardımcı olur.

  2. Kodu gizlemek, İç içe sınıfların bir başka kullanım alanıdır. İç içe sınıfları dış dünyadan gizleyebilirsiniz.

  3. Sınıfları anlamak kolaydır. Burada sınıflar birbirleriyle yakından ilişkilidir. Kod içinde sınıfları aramanıza gerek kalmaz. Hepsi bir aradadır.

İç ya da iç içe sınıflar Python’da en sık kullanılan özellik değildir. Ancak, kodu uygulamak için iyi bir özellik olabilir. İç ya da iç içe sınıflar kullandığınızda kodu düzenlemek oldukça kolaydır.

3. İç Sınıfları Kodlamak

İç ya da iç içe sınıfları uygulamak zor değildir. Kodun yapısını burada görebilirsiniz.

Dış sınıf içinde iç sınıfa self anahtar sözcüğüyle erişebilirsiniz. Böylece iç sınıfın bir örneğini hızla oluşturup dış sınıf içinde dilediğiniz işlemleri yapabilirsiniz. Ancak, bir iç sınıftan dış sınıfa erişemezsiniz. Aşağıda bir örnek görelim.

class Outer:
    """Outer Class"""

    def __init__(self):
        ## instantiating the 'Inner' class
        self.inner = self.Inner()

    def reveal(self):
        ## calling the 'Inner' class function display
        self.inner.inner_display("Calling Inner class function from Outer class")

    class Inner:
        """Inner Class"""

        def inner_display(self, msg):
            print(msg)

Şimdi, Outer sınıfının bir örneğini oluşturacak ve Inner sınıfının inner_display() yöntemini çalıştırmak için onun reveal() yöntemini çağıracaksınız.

## creating an instance of the 'Outer' class
outer = Outer()
## calling the 'reveal()' method
outer.reveal()
Calling Inner class function from Outer class

İç sınıfa erişmenin başka bir yoluna bakalım. Bu yol biraz daha az verimlidir.

Outer().Inner().inner_display("Calling the Inner class method directly")
Calling the Inner class method directly

Peki, dış sınıfın dışında iç sınıfın bir örneğini oluşturmak isterseniz? Bunu yapabilir misiniz? Evet, dış sınıfın dışında iç sınıfın bir örneğini nasıl oluşturacağınıza bakalım.

outer = Outer()

## instantiating the inner class
inner = outer.Inner() ## inner = Outer().Inner() or inner = outer.inner
inner.inner_display("Just Print It!")
Just Print It!

3.1. Birden Fazla İç Sınıf

Birden fazla iç sınıf içeren bir sınıftır. Bir sınıfın içinde birden fazla iç sınıf bulunabilir. Daha önce tanımladığımız gibi, birden çok iç sınıfı uygulamak kolaydır.

class Outer:
    """Outer Class"""

    def __init__(self):
        ## Instantiating the 'Inner' class
        self.inner = self.Inner()
        ## Instantiating the '_Inner' class
        self._inner = self._Inner()

    def show_classes(self):
        print("This is Outer class")
        print(inner)
        print(_inner)

    class Inner:
        """First Inner Class"""

        def inner_display(self, msg):
            print("This is Inner class")
            print(msg)

    class _Inner:
        """Second Inner Class"""

        def inner_display(self, msg):
            print("This is _Inner class")
            print(msg)

    ## ...

Sınıflara erişim, daha önce yaptığımızla aynıdır. Daha iyi anlamak için örneğe bakın.

## instantiating the classes

## 'Outer' class
outer = Outer()
## 'Inner' class
inner = outer.Inner() ## inner = outer.inner or inner = Outer().Inner()
## '_Inner' class
_inner = outer._Inner() ## _inner = outer._outer or _inner = Outer()._Inner()

## calling the methods
outer.show_classes()

print()

## 'Inner' class
inner.inner_display("Just Print It!")

print()

## '_Inner' class
_inner.inner_display("Just Show It!")
This is Outer class
<__main__.Outer.Inner object at 0x0000021B37962048>
<__main__.Outer._Inner object at 0x0000021B37962160>

This is Inner class
Just Print It!

This is _Inner class
Just Show It!

3.2. Çok Katmanlı İç Sınıflar

Çok katmanlı iç sınıflarda, iç sınıf, bir öncekinin iç sınıfı olan başka bir sınıf içerir. Bu hiyerarşinin yapısını burada görebilirsiniz:

class Outer:
    """Outer Class"""

    def __init__(self):
        ## instantiating the 'Inner' class
        self.inner = self.Inner()
        ## instantiating the multilevel 'InnerInner' class
        self.innerinner = self.inner.InnerInner()

    def show_classes(self):
        print("This is Outer class")
        print(inner)

    ## inner class
    class Inner:
        """First Inner Class"""

        def __init__(self):
            ## instantiating the 'InnerInner' class
            self.innerinner = self.InnerInner()

        def show_classes(self):
            print("This is Inner class")
            print(self.innerinner)

        ## multilevel inner class
        class InnerInner:

            def inner_display(self, msg):
                print("This is multilevel InnerInner class")
                print(msg)

        def inner_display(self, msg):
            print("This is Inner class")
            print(msg)

    ## ...

Çok katmanlı iç sınıfın nasıl örnekleneceğine bakalım.

outer = Outer()

inner = outer.Inner()

## this is 'InnerInner' class instance
innerinner = inner.InnerInner() ## innerinner = Outer().Inner().InnerInner()

## let's call its method inner_display
innerinner.inner_display("Just Print It!")
This is multilevel InnerInner class
Just Print It!

Sonuç

Artık iç sınıf kavramını anladığınızı umuyorum. Şimdi iç içe sınıflarla denemeler yapma zamanı. Mutlu Kodlamalar :)

Sınıflar hakkında daha fazla bilgi edinmek isterseniz DataCamp'in Python Nesne Yönelimli Programlama (OOP): Rehber içeriğine göz atın.

DataCamp'in Python'da Nesne Yönelimli Programlama kursunu alın.

Konular

İlgili