Skip to main content

Class Object Attributes & Instance Attributes

Setelah memahami konsep class dan object, kita akan mempelajari bagaimana sebuah class menyimpan data.

Dalam Python, attribute pada class dapat dibedakan menjadi dua konsep utama:

  • Class Object Attribute
  • Instance Attribute

Perbedaan keduanya penting karena menentukan apakah sebuah attribute dimiliki oleh class secara umum atau dimiliki secara khusus oleh setiap object.


Class Object Attribute​

Class Object Attribute adalah attribute yang dimiliki oleh class dan nilainya secara umum berlaku untuk semua object yang dibuat dari class tersebut.

Attribute ini biasanya digunakan untuk menyimpan data yang bersifat umum atau sama untuk seluruh object.

Contohnya:

class PlayerCharacter:
membership = True

Pada contoh tersebut, membership merupakan Class Object Attribute.

Karena attribute tersebut didefinisikan langsung di dalam class, nilainya dapat digunakan oleh object yang dibuat dari class tersebut.


Instance Attribute​

Instance Attribute adalah attribute yang dimiliki oleh masing-masing object.

Nilainya dapat berbeda antara satu object dengan object lainnya.

Instance attribute biasanya dibuat di dalam method __init__ menggunakan self.

Contoh:

class PlayerCharacter:

membership = True

def __init__(self, name, age):
self.name = name
self.age = age

Pada contoh tersebut:

  • membership adalah Class Object Attribute.
  • self.name adalah Instance Attribute.
  • self.age adalah Instance Attribute.

Jika kita membuat beberapa object:

player1 = PlayerCharacter("Budi", 25)
player2 = PlayerCharacter("Andi", 30)

Maka secara konsep:

PlayerCharacter
│
├── membership = True
│
├── player1
│ ├── name = "Budi"
│ └── age = 25
│
└── player2
├── name = "Andi"
└── age = 30

membership bersifat umum, sedangkan name dan age dapat berbeda untuk setiap object.


Perbedaan Class Object Attribute dan Instance Attribute​

Perbedaan keduanya dapat diringkas sebagai berikut:

AttributeClass Object AttributeInstance Attribute
Dimiliki olehClassObject
DidefinisikanLangsung di dalam classBiasanya di dalam __init__
Menggunakan selfTidakYa
NilaiUmumnya sama untuk semua objectDapat berbeda setiap object
Contohmembershipself.name, self.age

Contoh Lengkap​

Berikut contoh class yang memiliki kedua jenis attribute:

class PlayerCharacter:

membership = True

def __init__(self, name, age):
self.name = name
self.age = age

Kemudian kita membuat beberapa object:

player1 = PlayerCharacter("Budi", 25)
player2 = PlayerCharacter("Andi", 30)

Kita dapat mengakses instance attribute melalui object:

print(player1.name)
print(player1.age)

print(player2.name)
print(player2.age)

Output:

Budi
25
Andi
30

Sedangkan membership merupakan attribute yang berasal dari class:

print(player1.membership)
print(player2.membership)

Output:

True
True

Mengakses Class Object Attribute​

Class Object Attribute dapat diakses menggunakan nama class.

Contoh:

class PlayerCharacter:
membership = True

Kita dapat mengaksesnya menggunakan:

print(PlayerCharacter.membership)

Output:

True

Class Object Attribute juga dapat diakses melalui object:

player = PlayerCharacter()

print(player.membership)

Python dapat menemukan membership pada class ketika attribute tersebut tidak ditemukan secara khusus pada object.


Mengakses Instance Attribute​

Instance Attribute biasanya diakses menggunakan object.

Contoh:

class PlayerCharacter:

def __init__(self, name, age):
self.name = name
self.age = age

Kemudian:

player = PlayerCharacter("Budi", 25)

print(player.name)
print(player.age)

Output:

Budi
25

Attribute tersebut merupakan bagian dari object player.


Instance Attribute Tidak Dimiliki Class Secara Langsung​

Perhatikan contoh berikut:

class PlayerCharacter:

def __init__(self, name, age):
self.name = name
self.age = age

Kemudian:

player = PlayerCharacter("Budi", 25)

name dan age merupakan attribute dari object player.

Kita tidak dapat mengaksesnya langsung melalui nama class:

print(PlayerCharacter.name)

Kode tersebut akan menghasilkan AttributeError karena name bukan attribute yang didefinisikan langsung pada class.

Attribute tersebut tersedia pada object:

print(player.name)

Peran self​

self merupakan referensi ke object yang sedang digunakan.

Contohnya:

class PlayerCharacter:

def __init__(self, name, age):
self.name = name
self.age = age

Ketika kita membuat:

player1 = PlayerCharacter("Budi", 25)

Maka secara konsep:

self.name → player1.name
self.age → player1.age

Ketika membuat object lain:

player2 = PlayerCharacter("Andi", 30)

Maka:

self.name → player2.name
self.age → player2.age

Karena itu, self memungkinkan setiap object memiliki data masing-masing.


self pada Method​

Selain digunakan untuk mengakses instance attribute, self juga digunakan untuk mengakses method lain yang dimiliki object.

Contoh:

class PlayerCharacter:

def __init__(self, name):
self.name = name

def greet(self):
print(f"Hello, {self.name}")

Kemudian:

player = PlayerCharacter("Budi")

player.greet()

Output:

Hello, Budi

Di dalam method greet(), self.name mengacu pada attribute name milik object yang sedang menjalankan method tersebut.


Mengapa Method Membutuhkan self?​

Method yang digunakan untuk bekerja dengan instance biasanya menerima self sebagai parameter pertama.

Contoh:

class PlayerCharacter:

def greet(self):
print("Hello")

Ketika dipanggil:

player = PlayerCharacter()

player.greet()

Python secara otomatis menghubungkan object player dengan parameter self.

Secara konsep:

player.greet()
↓
greet(player)

Karena itu, self memungkinkan method mengetahui object mana yang sedang digunakan.


Attribute Lookup​

Ketika kita mengakses sebuah attribute melalui object, Python akan mencari attribute tersebut.

Secara sederhana, Python akan mencari pada object terlebih dahulu.

Jika tidak ditemukan, Python kemudian dapat mencari pada class.

Contoh:

class PlayerCharacter:

membership = True

def __init__(self, name):
self.name = name

Ketika kita menjalankan:

player = PlayerCharacter("Budi")

print(player.name)

Python menemukan name pada object player.

Ketika kita menjalankan:

print(player.membership)

Python tidak menemukan membership sebagai attribute khusus pada object, sehingga Python dapat menemukannya pada class PlayerCharacter.

Secara sederhana:

player.membership
│
↓
Cek object
│
↓
Tidak ditemukan
│
↓
Cek class
│
↓
membership = True

Fungsi help()​

Python menyediakan fungsi bawaan help() untuk melihat informasi mengenai sebuah object, class, function, atau tipe data.

Contohnya:

help(PlayerCharacter)

Python akan menampilkan informasi mengenai class tersebut.

Kita juga dapat melihat dokumentasi dari tipe data bawaan Python:

help(list)

Informasi yang ditampilkan dapat mencakup:

  • Dokumentasi class.
  • Method yang tersedia.
  • Attribute tertentu.
  • Dunder method.
  • Informasi mengenai inheritance.

Inspeksi Object dengan help()​

Misalnya kita memiliki:

class PlayerCharacter:

membership = True

def __init__(self, name, age):
self.name = name
self.age = age

Kita dapat menjalankan:

help(PlayerCharacter)

Perintah tersebut membantu kita memahami struktur class dan method yang tersedia.

Namun, perlu diperhatikan bahwa attribute instance seperti name dan age baru dibuat ketika object diinisialisasi.


Gambaran Struktur Class dan Object​

Hubungan antara class, class object attribute, dan instance attribute dapat digambarkan sebagai berikut:

PlayerCharacter
│
├── Class Object Attribute
│ └── membership = True
│
├── __init__()
│
└── Object
│
├── player1
│ ├── name = "Budi"
│ └── age = 25
│
└── player2
├── name = "Andi"
└── age = 30

Class menyediakan struktur umum.

Setiap object kemudian memiliki instance attribute masing-masing.


Kesimpulan​

Dalam Python, attribute pada OOP dapat digunakan untuk menyimpan data yang berkaitan dengan class maupun object.

Dua konsep utama yang perlu dipahami adalah:

  • Class Object Attribute merupakan attribute yang didefinisikan pada class dan secara umum dapat digunakan oleh semua object.
  • Instance Attribute merupakan attribute yang dimiliki oleh masing-masing object dan biasanya dibuat menggunakan self di dalam __init__.

Contoh:

class PlayerCharacter:

membership = True

def __init__(self, name, age):
self.name = name
self.age = age

Pada contoh tersebut:

membership
↓
Class Object Attribute
↓
Berlaku secara umum

self.name
self.age
↓
Instance Attribute
↓
Spesifik untuk setiap object

Memahami perbedaan kedua jenis attribute ini sangat penting sebelum mempelajari konsep OOP berikutnya seperti method, class method, static method, encapsulation, inheritance, dan polymorphism.