Lewati ke konten utama

Kelas Dalam di Python

Dalam tutorial Python dasar ini, Anda akan mempelajari tentang alasan dan waktu yang tepat untuk menggunakan kelas dalam.
Diperbarui 28 Sep 2026  · 5 mnt Baca

Jelajahi bersama AI

ChatGPTClaudePerplexity

Anda mungkin pernah mendengar tentang fungsi bersarang di Python. Jika Anda tahu apa artinya, maka memahami kelas dalam/bersarang bukanlah hal yang sulit. Kita akan mengeksplorasi beberapa hal baru pada kelas Dalam atau Bersarang di sini.

1. Kelas Dalam atau Bersarang

Kelas Dalam atau Bersarang didefinisikan di dalam kelas lain. Lihat struktur kelas dalam atau bersarang.

## outer class
class Outer:

    ## inner class
    class Inner:
        pass

        ## multilevel inner class
        class InnerInner:
            pass

    ## another inner class
    class _Inner:
        pass

    ## ...

    pass

Jalankan dan edit kode dari Tutorial ini secara online

Jalankan kode

2. Mengapa Kelas Dalam?

  1. Pengelompokan dua atau lebih kelas. Misalnya Anda memiliki dua kelas Car dan Engine. Setiap Car membutuhkan Engine. Namun, Engine tidak akan digunakan tanpa Car. Jadi, Anda menjadikan Engine sebagai kelas dalam dari Car. Ini membantu menghemat kode.

  2. Menyembunyikan kode adalah kegunaan lain dari kelas bersarang. Anda dapat menyembunyikan kelas bersarang dari dunia luar.

  3. Kelas menjadi mudah dipahami. Kelas-kelasnya saling berkaitan erat di sini. Anda tidak perlu mencari-cari kelas di dalam kode. Semuanya berada bersama.

Kelas dalam atau bersarang bukanlah fitur yang paling sering digunakan di Python. Namun, ini bisa menjadi fitur yang baik untuk mengimplementasikan kode. Kode menjadi mudah ditata ketika Anda menggunakan kelas dalam atau bersarang.

3. Menulis Kode Kelas Dalam

Mengimplementasikan kelas dalam atau bersarang tidaklah sulit. Anda dapat melihat struktur kodenya di sini.

Anda dapat mengakses kelas dalam di kelas luar menggunakan kata kunci self. Jadi, Anda bisa dengan cepat membuat instance dari kelas dalam dan melakukan operasi di kelas luar sesuai kebutuhan. Namun, Anda tidak dapat mengakses kelas luar di dalam kelas dalam. Mari lihat contoh di bawah ini.

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)

Sekarang, Anda akan membuat instance dari kelas Outer dan memanggil metode reveal() untuk mengeksekusi metode kelas Inner yaitu inner_display().

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

Mari lihat cara lain untuk mengakses kelas dalam. Cara ini sedikit kurang efisien.

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

Bagaimana jika Anda ingin membuat instance dari kelas dalam di luar kelas luar? Bisakah Anda melakukannya? Ya, mari lihat cara membuat instance dari kelas dalam di luar kelas luar.

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. Beberapa Kelas Dalam

Ini adalah kelas yang memuat lebih dari satu kelas dalam. Anda dapat memiliki lebih dari satu kelas dalam di dalam sebuah kelas. Seperti yang telah kita definisikan sebelumnya, mengimplementasikan beberapa kelas dalam itu mudah.

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)

    ## ...

Mengakses kelas-kelasnya sama seperti yang kita lakukan sebelumnya. Lihat contohnya untuk pemahaman yang lebih baik.

## 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. Kelas Dalam Multilevel

Pada kelas dalam multilevel, kelas dalam memuat kelas lain yang juga merupakan kelas dalam dari kelas sebelumnya. Anda dapat melihat struktur hierarki ini di sini:

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)

    ## ...

Mari lihat cara membuat instance kelas dalam multilevel.

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!

Kesimpulan

Saya harap Anda sekarang memahami konsep kelas dalam. Kini saatnya Anda bereksperimen dengan kelas bersarang. Selamat ngoding :)

Jika Anda ingin mempelajari lebih lanjut tentang kelas, lihat Python Object-Oriented Programming (OOP): Tutorial dari DataCamp.

ikuti kursus Object-Oriented Programming in Python dari DataCamp.

Topik
Python

Pelajari lebih lanjut tentang Python

Kursus

Pemrograman Berorientasi Objek di Python

4 jam
105.4K
Pelajari cara membuat kelas, meningkatkan pewarisan dan polimorfisme untuk menggunakan kembali dan mengoptimalkan kode
Lihat DetailRight Arrow
Mulai Kursus
Lihat SelengkapnyaRight Arrow
Terkait

blogs

Tutorial Korelasi di R

Dapatkan pengenalan dasar-dasar korelasi di R: pelajari lebih lanjut tentang koefisien korelasi, matriks korelasi, plotting korelasi, dan sebagainya.
David Woods's photo

David Woods

13 mnt

blogs

Spaghetti Plot dan Jalur Badai

Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Hugo Bowne-Anderson's photo

Hugo Bowne-Anderson

13 mnt

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Dario Radečić's photo

Dario Radečić

15 mnt

blogs

12 Alternatif ChatGPT Terbaik yang Bisa Anda Coba pada 2026

Artikel ini menyajikan daftar alternatif ChatGPT yang akan meningkatkan produktivitas Anda.
Javier Canales Luna's photo

Javier Canales Luna

14 mnt

Lihat SelengkapnyaLihat Selengkapnya