Variabel di dalam OOP python jika ditinjau dari jumlah copy-nya, maka ia terbagi menjadi 2: yang pertama adalah static variable, dan yang kedua adalah instance variable.
Keduanya sama-sama variabel seperti umumnya. Bedanya, variabel statis hanya memiliki satu copy saja di dalam memory selama aplikasi berjalan, sedangkan instance variable bisa memiliki banyak copy sesuai dari banyaknya instan.
Instance Variable
Dinamakan instance variable karena variabel tersebut adalah milik dari tiap instance/objek dari suatu kelas. Artinya, jika sebuah kelas memiliki instance variable dengan nama a, maka setiap instance dari kelas tersebut akan memiliki variabel a sendiri-sendiri.
Di dalam python, setiap variabel yang didefinisikan di dalam fungsi pada sebuah kelas (lewat variabel budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 0), maka ia dikatakan instance variable.
Perhatikan contoh berikut:
class Mahasiswa: def __init__(self, nama): self.nama = nama
Pada contoh di atas, kelas budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 1 memiliki atribut budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 2 yang dilekatkan ke dalam objek budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 0. Itu artinya: setiap instance/objek dari kelas budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 1 akan memiliki variabel budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 2 dengan nilainya masing-masing.
Sekarang, buat dua instance dari kelas budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 1:
budi = Mahasiswa('Budi') andi = Mahasiswa('Andi')
Pada kode program di atas: instance dengan nama budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 7 dan budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 8 masing-masing memiliki atribut/variabel budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 2 dengan nilai yang berbeda.
Pertanyaannya adalah: ada berapa copy dari variabel budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 2 selama program dijalankan?
Jawabannya: ada 2 copy. Karena variabel budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 2 adalah instance variable dan jumlah copy-nya sama dengan jumlah instance dari kelas yang bersangkutan.
Mari kita tampilkan masing-masing nilai dari variabel budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 2:
print(budi.nama) print(andi.nama)
Output:
Budi Andi
Static Variable atau Class Variable
Seperti yang telah disinggung di atas bahwasanya static variable adalah variabel statis yang jumlah copy-nya hanya ada satu saja selama aplikasi dijalankan.
Misal kita memiliki sebuah kelas, dan kelas tersebut memiliki seratus instance, tetap saja static variable dari kelas tersebut hanya ada satu saja di memori. Oleh karena itu, static variable juga sering dikenal dengan istilah class variable.
Perhatikan contoh berikut:
class Mahasiswa: # static atau class variable jenjang = 'S1' def __init__(self, nama): # instance variable self.nama = nama
Pada kode di atas, terdapat dua buah variabel. Yang pertama adalah variabel print(budi.nama) print(andi.nama) 3 yang merupakan variabel static –di mana ia disandarkan langsung kepada kelas budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 1–. Dan yang kedua adalah variabel budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 2 yang mana ia disandarkan kepada objek budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 0 alias kepada instance yang bersangkutan.
Kita bisa mengakses langsung variabel print(budi.nama) print(andi.nama) 3 tanpa harus membuat objek, akan tetapi kita tidak bisa mengakses variabel budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 2 tanpa membuat sebuah objek.
Perhatikan contoh berikut:
>>> Mahasiswa.jenjang 'S1' >>> Mahasiswa.nama Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: type object 'Mahasiswa' has no attribute 'nama' >>>
Variabel statis juga bisa kita akses melalui instance dari suatu kelas:
>>> budi = Mahasiswa('Budi') >>> budi.jenjang 'S1' >>>
Kalau kita ingin mengubah isi dari variabel statis, kita harus mengubahnya lewat nama kelas tersebut secara langsung dan bukan melalui objek dari kelas yang bersangkutan.
Perhatikan contoh berikut:
>>> budi = Mahasiswa('Budi') >>> budi.jenjang 'S1' >>> andi = Mahasiswa('Andi') >>> andi.jenjang 'S1' >>> Mahasiswa.jenjang = 'S3' >>> andi.jenjang 'S3' >>> budi.jenjang 'S3'
Kesimpulan
Dari pertemuan kali ini bisa kita simpulkan bahwa variabel dalam konteks OOP pada python, jika ditinjau dari jumlah copy-nya terbagi menjadi dua: static variable dan instance’s variable.
Static variable hanya memiliki satu copy saja sedangkan instance variable memiliki jumlah copy yang sama sesuai dengan jumlah instan yang ada.
Variable static didefinisikan secara langsung di dalam blok kode print(budi.nama) print(andi.nama) 9, berbeda dengan instance variable yang mana ia disandarkan ke dalam objek budi = Mahasiswa('Budi') andi = Mahasiswa('Andi') 0 pada method sebuah print(budi.nama) print(andi.nama) 9.
Kode Program Lengkap
Untuk kode program lengkap pada pertemuan kali ini, kalian bisa mendapatkannya di sini.
Pertemuan Selanjutnya
Pada pertemuan selanjutnya insyaallah kita akan membahas tentang static method pada python.
Ia hampir sama dengan static variable, yaitu sebuah fungsi/method yang bersifat statis dan bisa dipanggil tanpa harus membuat sebuah instan.