# Class dan Object
Kelas adalah struktur utama dalam OOP yang mendefinisikan atribut dan metode yang dimiliki oleh objek. Kelas berfungsi sebagai blueprint untuk menciptakan objek. Dalam Python, Anda dapat mendefinisikan kelas dengan menggunakan kata kunci class. Contohnya:
class Person:
def display(self):
print("I am a person", self)
def greet(self):
print('Hello, how are you doing', self)
p1 = Person()
p2 = Person()
p1.display()
p1.greet()
p2.display()
p2.greet()
Program di atas mendefinisikan sebuah class Person dan menciptakan dua objek dari class tersebut, yaitu p1 dan p2. Berikut adalah analisisnya:
## Class Definition:
class Person:
def display(self):
print("I am a person", self)
def greet(self):
print('Hello, how are you doing', self)
Class Person memiliki dua method, yaitu display() dan greet().
display(self): Method ini menampilkan pesan "I am a person" diikuti dengan self, yang merujuk ke instance dari class tersebut. Python secara otomatis menyertakan referensi ke objek yang memanggil method sebagai self.
greet(self): Method ini menampilkan pesan "Hello, how are you doing" diikuti dengan self.
## Object Creation:
p1 = Person()
p2 = Person()
Di sini, dua objek dibuat dari class Person, yaitu p1 dan p2.
## Method Calls:
p1.display()
p1.greet()
p1.display() memanggil method display() untuk objek p1, yang akan menampilkan:
I am a person <__main__.Person object at 0x...>
self dalam konteks ini merujuk ke objek p1, yang ditampilkan sebagai referensi memori objek p1.
p1.greet() memanggil method greet() untuk objek p1, yang akan menampilkan:
Hello, how are you doing <__main__.Person object at 0x...>
Langkah yang sama diulang untuk objek p2:
p2.display()
p2.greet()
Output akan mirip, tetapi referensi memori yang ditampilkan berbeda, karena p2 adalah objek yang berbeda dari p1.
## Output Example:
Misalkan objek p1 berada di alamat memori 0x7f9b0, dan objek p2 di alamat 0x7f9b8, maka outputnya akan seperti ini:
I am a person <__main__.Person object at 0x7f9b0>
Hello, how are you doing <__main__.Person object at 0x7f9b0>
I am a person <__main__.Person object at 0x7f9b8>
Hello, how are you doing <__main__.Person object at 0x7f9b8>
## Kesimpulan:
self di dalam method merujuk pada instance (objek) yang memanggil method tersebut.
Objek p1 dan p2 memiliki referensi memori yang berbeda, sehingga ketika method dipanggil, self mengacu ke masing-masing objek dengan alamat memori yang berbeda.