Kursus
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 kode2. Mengapa Kelas Dalam?
-
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.
-
Menyembunyikan kode adalah kegunaan lain dari kelas bersarang. Anda dapat menyembunyikan kelas bersarang dari dunia luar.
-
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.
