Lewati ke konten utama

Properti vs. Getter dan Setter di Python

Dalam tutorial ini, Anda akan mempelajari perbedaan antara Properti Python dan Getter & Setter.
· 6 mnt Baca

Jelajahi bersama AI

Apa itu Getter dan Setter?

  • Getter: Metode dalam Pemrograman Berorientasi Objek (OOP) yang membantu mengakses atribut privat dari sebuah kelas.
  • Setter: Metode dalam fitur OOP yang membantu menetapkan nilai ke atribut privat dalam sebuah kelas.

Atribut Privat - Enkapsulasi

Jika Anda belum familiar dengan atribut privat atau metode privat di Python, bacalah artikel DataCamp ini.

Mari lihat bagaimana Anda dapat mengimplementasikan atribut privat di Python.

class SampleClass:

    def __init__(self, a):
        ## private varibale or property in Python
        self.__a = a

    ## getter method to get the properties using an object
    def get_a(self):
        return self.__a

    ## setter method to change the value 'a' using an object
    def set_a(self, a):
        self.__a = a

SampleClass memiliki tiga metode.

  • __init__:- Digunakan untuk menginisialisasi atribut atau properti dari sebuah kelas.

    • __a:- Ini adalah atribut privat.
  • get_a:- Digunakan untuk mendapatkan nilai atribut privat a.
  • set_a:- Digunakan untuk menetapkan nilai a menggunakan sebuah objek dari kelas.

Anda tidak dapat mengakses variabel privat secara langsung di Python. Itulah mengapa Anda mengimplementasikan metode getter.

Mari lihat bagaimana kelas tersebut bekerja.

## creating an object
obj = SampleClass(10)

## getting the value of 'a' using get_a() method
print(obj.get_a())

## setting a new value to the 'a' using set_a() method
obj.set_a(45)

print(obj.get_a())
10
45

Begitulah cara Anda mengimplementasikan atribut privat, getter, dan setter di Python. Proses yang sama diikuti di Java. Mari tulis implementasi yang sama dengan cara yang lebih Pythonic.

class PythonicWay:

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

Anda tidak memerlukan metode getter atau setter untuk mengakses atau mengubah atribut. Anda dapat mengaksesnya langsung menggunakan nama atribut.

Mari lihat.

## Creating an object for the 'PythonicWay' class
obj = PythonicWay(100)

print(obj.a)
100

Apa perbedaan antara dua kelas di atas.

  • SampleClass menyembunyikan atribut dan metode privat. Ini mengimplementasikan fitur enkapsulasi dari OOP.
  • PythonicWay tidak menyembunyikan data. Ini tidak mengimplementasikan fitur enkapsulasi apa pun.

Mana yang lebih baik digunakan?

  • Ini bergantung pada kebutuhan kita. Jika Anda menginginkan atribut dan metode privat, Anda dapat mengimplementasikan kelas menggunakan metode setter, getter, jika tidak Anda akan mengimplementasikannya dengan cara biasa.

Properti

Sekarang, bagaimana jika Anda ingin memiliki beberapa kondisi untuk menetapkan nilai sebuah atribut di SampleClass.

Misalnya, jika nilai yang kita berikan genap dan positif maka kita dapat menetapkannya ke atribut, jika tidak tetapkan nilainya menjadi 2.

Mari implementasikan ini dengan mengubah metode set_a() di SampleClass.

class SampleClass1:

    def __init__(self, a):
        ## calling the set_a() method to set the value 'a' by checking certain conditions
        self.set_a(a)

    ## getter method to get the properties using an object
    def get_a(self):
        return self.__a

    ## setter method to change the value 'a' using an object
    def set_a(self, a):

        ## condition to check whether 'a' is suitable or not
        if a > 0 and a % 2 == 0:
            self.__a = a
        else:
            self.__a = 2

Mari periksa kelasnya dengan membuat sebuah objek.

## creating an object for the class 'SampleClass1'
obj = SampleClass1(16)

print(obj.get_a())
16

Mari lihat bagaimana mengimplementasikan kelas di atas menggunakan dekorator @property.

class Property:

    def __init__(self, var):
        ## initializing the attribute
        self.a = var

    @property
    def a(self):
        return self.__a

    ## the attribute name and the method name must be same which is used to set the value for the attribute
    @a.setter
    def a(self, var):
        if var > 0 and var % 2 == 0:
            self.__a = var
        else:
            self.__a = 2

@property digunakan untuk mendapatkan nilai atribut privat tanpa menggunakan metode getter. Kita harus menempatkan baris @property di depan metode tempat kita mengembalikan variabel privat.

Untuk menetapkan nilai variabel privat, kita menggunakan @method_name.setter di depan metodenya. Kita harus menggunakannya sebagai setter.

Mari uji kelas Property untuk memeriksa apakah dekorator berfungsi dengan baik atau tidak.

## creating an object for the class 'Property'
obj = Property(23)

print(obj.a)
2

@a.setter akan menetapkan nilai a dengan memeriksa kondisi yang telah kita sebutkan di dalam metode. Cara lain menggunakan property adalah...

class AnotherWay:

    def __init__(self, var):
        ## calling the set_a() method to set the value 'a' by checking certain conditions
        self.set_a(var)

    ## getter method to get the properties using an object
    def get_a(self):
        return self.__a

    ## setter method to change the value 'a' using an object
    def set_a
    (self, var):

        ## condition to check whether var is suitable or not
        if var > 0 and var % 2 == 0:
            self.__a = var
        else:
            self.__a = 2

    a = property(get_a, set_a)

Teruskan semua metode getter dan setter ke property dan tetapkan ke variabel yang ingin Anda gunakan sebagai atribut kelas.

## creating an object for the 'AnotherWay' class
obj = AnotherWay(28)

print(obj.a)
28

Jadikan metode setter dan getter sebagai privat untuk menyembunyikannya. Mari lakukan.

class FinalClass:

    def __init__(self, var):
        ## calling the set_a() method to set the value 'a' by checking certain conditions
        self.__set_a(var)

    ## getter method to get the properties using an object
    def __get_a(self):
        return self.__a

    ## setter method to change the value 'a' using an object
    def __set_a(self, var):

        ## condition to check whether var is suitable or not
        if var > 0 and var % 2 == 0:
            self.__a = var
        else:
            self.__a = 2

    a = property(__get_a, __set_a)

Mari periksa apakah ini berfungsi dengan baik atau tidak.

## creating an object for the 'AnotherWay' class
obj = FinalClass(12)

print(obj.a)
12

Kesimpulan

Anda kini telah melihat bagaimana mengimplementasikan enkapsulasi di Python dan perbedaan antara setter, getter, dan property.

Jika Anda baru dalam Python, saya merekomendasikan Anda untuk mengikuti kursus gratis DataCamp Introduction to Python.

Jika Anda memiliki pertanyaan terkait artikel ini, silakan sebutkan di kolom komentar. Selamat ngoding!

Topik

Terkait

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026