Dalam pemrograman berorientasi objek, saat kami mendesain kelas, kami menggunakan variabel instan dan variabel kelas
Di Kelas, atribut dapat didefinisikan menjadi dua bagian
- Variabel instan. Jika nilai variabel bervariasi dari objek ke objek, maka variabel tersebut disebut variabel instan
- Variabel Kelas. Variabel kelas adalah variabel yang dideklarasikan di dalam kelas, tetapi di luar metode instance apa pun atau metode Emma 10 ABC School Jessa 20 ABC School 9
Setelah membaca artikel ini, Anda akan belajar
- Cara membuat dan mengakses variabel kelas
- Memodifikasi nilai variabel kelas
- Variabel instan vs. variabel kelas
- Perilaku variabel kelas dalam pewarisan
Daftar isi
Apa itu Variabel Kelas di Python?
Jika nilai variabel tidak bervariasi dari satu objek ke objek lainnya, jenis variabel seperti itu disebut variabel kelas atau variabel statis
Variabel kelas dibagi oleh semua instance kelas. Tidak seperti variabel instan, nilai variabel kelas tidak bervariasi dari objek ke objek,
Dalam Python, variabel Kelas dideklarasikan saat kelas sedang dibangun. Mereka tidak didefinisikan di dalam metode kelas apa pun karena ini hanya satu salinan dari variabel statis yang akan dibuat dan dibagikan di antara semua objek kelas
Misalnya, di kelas Siswa, kita dapat memiliki variabel instan yang berbeda seperti nama dan nomor rol karena setiap nama siswa dan nomor rol berbeda.
Namun, jika kita ingin memasukkan nama sekolah ke dalam kelas siswa, kita harus menggunakan variabel kelas daripada variabel instan karena nama sekolah sama untuk semua siswa. Jadi alih-alih menjaga salinan terpisah di setiap objek, kita dapat membuat variabel kelas yang akan menyimpan nama sekolah sehingga semua siswa (objek) dapat membagikannya
Kita dapat menambahkan sejumlah variabel kelas dalam sebuah kelas
Buat Variabel Kelas
Variabel kelas dideklarasikan di dalam kelas, tetapi di luar metode instance atau metode Emma 10 ABC School Jessa 20 ABC School 9 apa pun
Dengan konvensi, biasanya ditempatkan tepat di bawah header kelas dan sebelum metode konstruktor dan metode lainnya
Contoh
class Student: # Class variable school_name = 'ABC School ' def __init__(self, name, roll_no): self.name = name self.roll_no = roll_no # create first object s1 = Student('Emma', 10) print(s1.name, s1.roll_no, Student.school_name) # access class variable # create second object s2 = Student('Jessa', 20) # access class variable print(s2.name, s2.roll_no, Student.school_name)Keluaran
Emma 10 ABC School Jessa 20 ABC SchoolPada contoh di atas, kita membuat variabel kelas class Student: # Class variable school_name = 'ABC School ' # constructor def __init__(self, name): self.name = name # access class variable inside constructor using self print(self.school_name) # access using class name print(Student.school_name) # create Object s1 = Student('Emma')1 dan mengaksesnya menggunakan objek dan nama kelas
Catatan. Seperti variabel biasa, variabel kelas dapat menyimpan data jenis apa pun. Kita bisa menggunakan daftar Python, Tuple Python, dan kamus Python sebagai variabel kelas
Mengakses Variabel Kelas
Kita dapat mengakses variabel statis baik dengan nama kelas atau referensi objek, tetapi disarankan untuk menggunakan nama kelas
Di Python, kita bisa mengakses variabel kelas di tempat-tempat berikut
- Akses di dalam konstruktor dengan menggunakan parameter class Student: # Class variable school_name = 'ABC School ' # constructor def __init__(self, name): self.name = name # access class variable inside constructor using self print(self.school_name) # access using class name print(Student.school_name) # create Object s1 = Student('Emma')2 atau nama kelas
- Akses variabel kelas di dalam metode instance dengan menggunakan salah satu dari nama kelas
- Akses dari luar kelas dengan menggunakan referensi objek atau nama kelas
Contoh 1. Akses Variabel Kelas di konstruktor
class Student: # Class variable school_name = 'ABC School ' # constructor def __init__(self, name): self.name = name # access class variable inside constructor using self print(self.school_name) # access using class name print(Student.school_name) # create Object s1 = Student('Emma')_Keluaran
ABC School ABC SchoolContoh 2. Mengakses Variabel Kelas dalam metode Instance dan di luar kelas
class Student: # Class variable school_name = 'ABC School ' # constructor def __init__(self, name, roll_no): self.name = name self.roll_no = roll_no # Instance method def show(self): print('Inside instance method') # access using self print(self.name, self.roll_no, self.school_name) # access using class name print(Student.school_name) # create Object s1 = Student('Emma', 10) s1.show() print('Outside class') # access class variable outside class # access using object reference print(s1.school_name) # access using class name print(Student.school_name) _Keluaran
Inside instance method Emma 10 ABC School ABC School Outside class ABC School ABC School _Dalam contoh ini, kami mengakses variabel kelas class Student: # Class variable school_name = 'ABC School ' # constructor def __init__(self, name): self.name = name # access class variable inside constructor using self print(self.school_name) # access using class name print(Student.school_name) # create Object s1 = Student('Emma')1 menggunakan nama kelas dan kata kunci class Student: # Class variable school_name = 'ABC School ' # constructor def __init__(self, name): self.name = name # access class variable inside constructor using self print(self.school_name) # access using class name print(Student.school_name) # create Object s1 = Student('Emma')2 di dalam metode
Modifikasi Variabel Kelas
Umumnya, kami menetapkan nilai ke variabel kelas di dalam deklarasi kelas. Namun, kita dapat mengubah nilai variabel kelas baik di dalam kelas maupun di luar kelas
Catatan. Kita harus mengubah nilai variabel kelas menggunakan nama kelas saja
Contoh
class Student: # Class variable school_name = 'ABC School ' # constructor def __init__(self, name, roll_no): self.name = name self.roll_no = roll_no # Instance method def show(self): print(self.name, self.roll_no, Student.school_name) # create Object s1 = Student('Emma', 10) print('Before') s1.show() # Modify class variable Student.school_name = 'XYZ School' print('After') s1.show()Keluaran
Catatan
Praktik terbaik adalah menggunakan nama kelas untuk mengubah nilai variabel kelas. Karena jika kita mencoba mengubah nilai variabel kelas dengan menggunakan objek, variabel instan baru akan dibuat untuk objek tersebut, yang membayangi variabel kelas.
Contoh
class Student: # Class variable school_name = 'ABC School ' # constructor def __init__(self, name, roll_no): self.name = name self.roll_no = roll_no # create Objects s1 = Student('Emma', 10) s2 = Student('Jessa', 20) print('Before') print(s1.name, s1.roll_no, s1.school_name) print(s2.name, s2.roll_no, s2.school_name) # Modify class variable using object reference s1.school_name = 'PQR School' print('After') print(s1.name, s1.roll_no, s1.school_name) print(s2.name, s2.roll_no, s2.school_name)Keluaran
Before Emma 10 ABC School Jessa 20 ABC School After Emma 10 PQR School Jessa 20 ABC SchoolVariabel instan baru dibuat untuk objek s1, dan variabel ini membayangi variabel kelas. Jadi selalu gunakan nama kelas untuk memodifikasi variabel kelas
Variabel Kelas vs variabel Instance
Tabel berikut menunjukkan perbedaan antara variabel instan dan variabel kelas
Dalam Python, properti dapat didefinisikan menjadi dua bagian
- Variabel instan. Nilai variabel instan bervariasi dari objek ke objek. Variabel instan tidak dibagikan oleh objek. Setiap objek memiliki salinan atribut instancenya sendiri
- Variabel Kelas. Variabel kelas adalah variabel yang dideklarasikan di dalam kelas, tetapi di luar metode instance apa pun atau metode Emma 10 ABC School Jessa 20 ABC School 9 . Variabel kelas dibagi oleh semua instance kelas
Baca selengkapnya. Variabel Instance di Python dengan Contoh
Instance VariableClass VariableInstance variable tidak dibagi oleh objek. Setiap objek memiliki salinannya sendiri dari variabel instance attributeClass yang digunakan bersama oleh semua instanceVariabel instan dideklarasikan di dalam konstruktor i. e. , metode Emma 10 ABC School Jessa 20 ABC School _9. Variabel kelas dideklarasikan di dalam definisi kelas tetapi di luar metode instan dan konstruktor. Itu akan dibuat ketika sebuah instance dari kelas dibuat. Itu dibuat ketika program mulai dijalankan. Perubahan yang dilakukan pada variabel-variabel ini melalui satu objek tidak akan tercermin di objek lain. Perubahan yang dilakukan pada variabel kelas akan tercermin di semua objek. Variabel Kelas vs. Variabel Instance
Contoh
Mari kita lihat contoh untuk membuat variabel kelas dan variabel instan
Emma 10 ABC School Jessa 20 ABC School 0Keluaran
Emma 10 ABC School Jessa 20 ABC School _1Variabel Kelas Dalam Pewarisan
Seperti yang Anda ketahui, hanya satu salinan variabel kelas yang akan dibuat dan dibagikan di antara semua objek kelas itu
Saat kita menggunakan pewarisan, semua variabel dan metode kelas dasar tersedia untuk kelas anak. Dalam kasus seperti itu, Kami juga dapat mengubah nilai variabel kelas kelas induk di kelas anak
Kita dapat menggunakan nama kelas induk atau kelas anak untuk mengubah nilai variabel kelas kelas induk di kelas anak
Contoh
Emma 10 ABC School Jessa 20 ABC School _2Keluaran
Emma 10 ABC School Jessa 20 ABC School _3Bagaimana jika kelas anak dan kelas induk memiliki nama variabel kelas yang sama. Dalam hal ini, kelas anak tidak akan mewarisi variabel kelas dari kelas dasar. Jadi disarankan untuk membuat variabel kelas terpisah untuk kelas anak daripada mewarisi variabel kelas dasar
Contoh
Emma 10 ABC School Jessa 20 ABC School _4Keluaran
Emma 10 ABC School Jessa 20 ABC School 5Penggunaan Variabel Kelas yang Salah
Dalam Python, kita harus menggunakan variabel kelas dengan benar karena semua objek berbagi salinan yang sama. Jadi, jika salah satu objek mengubah nilai variabel kelas, maka semua objek mulai merujuk ke salinan baru
Misalnya,
Contoh
Emma 10 ABC School Jessa 20 ABC School _6Keluaran
Emma 10 ABC School Jessa 20 ABC School _7Dalam contoh di atas, variabel instan class Student: # Class variable school_name = 'ABC School ' # constructor def __init__(self, name): self.name = name # access class variable inside constructor using self print(self.school_name) # access using class name print(Student.school_name) # create Object s1 = Student('Emma')_7 unik untuk setiap pemain. Variabel kelas class Student: # Class variable school_name = 'ABC School ' # constructor def __init__(self, name): self.name = name # access class variable inside constructor using self print(self.school_name) # access using class name print(Student.school_name) # create Object s1 = Student('Emma')8 dan class Student: # Class variable school_name = 'ABC School ' # constructor def __init__(self, name): self.name = name # access class variable inside constructor using self print(self.school_name) # access using class name print(Student.school_name) # create Object s1 = Student('Emma')9 dapat diakses dan dimodifikasi oleh objek apa pun
Karena kedua objek memodifikasi variabel kelas, variabel instan baru dibuat untuk objek tertentu dengan nama yang sama dengan variabel kelas, yang membayangi variabel kelas.
Dalam kasus kami, untuk objek ABC School ABC School0 variabel instan baru ABC School ABC School1 dibuat, dan untuk objek ABC School ABC School2 variabel instan baru class Student: # Class variable school_name = 'ABC School ' # constructor def __init__(self, name): self.name = name # access class variable inside constructor using self print(self.school_name) # access using class name print(Student.school_name) # create Object s1 = Student('Emma')9 dibuat
Jadi ketika Anda mencoba mengakses variabel kelas menggunakan objek ABC School ABC School0 atau ABC School ABC School2, itu tidak akan mengembalikan nilai variabel kelas yang sebenarnya
Untuk menghindarinya, selalu ubah nilai variabel kelas menggunakan nama kelas sehingga semua objek mendapatkan nilai yang diperbarui. Seperti ini