Operator overloading: membandingkan objek

Pengantar Pemrograman Berorientasi Objek di Python

George Boorman

Curriculum Manager, DataCamp

Kesetaraan objek

class Customer:
    def __init__(self, name, balance):
        self.name, self.balance = name, balance  

customer1 = Customer("Maryam Azar", 3000)
customer2 = Customer("Maryam Azar", 3000)

# Periksa kesetaraan customer1 == customer2
False
Pengantar Pemrograman Berorientasi Objek di Python

Kesetaraan objek

class Customer:
    def __init__(self, name, balance, acc_id):
        self.name, self.balance = name, balance
        self.acc_id = acc_id    

customer1 = Customer("Maryam Azar", 3000, 123)
customer2 = Customer("Maryam Azar", 3000, 123)

customer1 == customer2
False
Pengantar Pemrograman Berorientasi Objek di Python

Variabel adalah referensi

customer_one = Customer("Maryam Azar", 3000, 123)
customer_two = Customer("Maryam Azar", 3000, 123)

print(customer_one)
<__main__.Customer at 0x1f8598e2e48>
print(customer_two)
<__main__.Customer at 0x1f8598e2240>
  • Keluaran print() merujuk ke lokasi memori tempat variabel disimpan
  • == membandingkan referensi, bukan data
Pengantar Pemrograman Berorientasi Objek di Python

Perbandingan kustom

# Dua list berbeda dengan data yang sama
list_one = [1,2,3]
list_two = [1,2,3]

list_one == list_two
True
Pengantar Pemrograman Berorientasi Objek di Python

Metode __eq__()

  • __eq__() dipanggil saat 2 objek kelas dibandingkan dengan ==
  • Menerima 2 argumen, self dan other - objek yang dibandingkan
  • Mengembalikan Boolean
Pengantar Pemrograman Berorientasi Objek di Python

Metode __eq__()

class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = acc_id, name

# Akan dipanggil saat == digunakan def __eq__(self, other):
# Cetak print("__eq__() is called") # Mengembalikan True jika semua atribut sama return (self.acc_id == other.acc_id) and (self.name == other.name)
Pengantar Pemrograman Berorientasi Objek di Python

Perbandingan objek

# Dua objek yang sama
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(123, "Maryam Azar")

customer1 == customer2
__eq__() is called
True
# Dua objek tidak sama - id berbeda
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(456, "Maryam Azar")

customer1 == customer2
__eq__() is called
False
Pengantar Pemrograman Berorientasi Objek di Python

Memeriksa tipe

  • Bagaimana jika dua objek dari kelas berbeda punya atribut dan nilai yang sama?
    • Python akan menilainya sama
class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = idacc_id name

    def __eq__(self, other):
        # Kembalikan True jika objek punya atribut yang sama
        # dan bertipe sama
        return (self.acc_id == other.acc_id) and (self.name == other.name)\
            and (type(self) == type(other))
Pengantar Pemrograman Berorientasi Objek di Python

Operator perbandingan lain

Operator Metode
== __eq__()
!= __ne__()
>= __ge__()
<= __le__()
> __gt__()
< __lt__()
  • Kustomisasi dengan mendefinisikannya di dalam kelas
Pengantar Pemrograman Berorientasi Objek di Python

Ayo berlatih!

Pengantar Pemrograman Berorientasi Objek di Python

Preparing Video For Download...