Operatör aşırı yükleme: nesneleri karşılaştırma

Python'da Nesne Yönelimli Programlamaya Giriş

George Boorman

Curriculum Manager, DataCamp

Nesne eşitliği

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

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

# Eşitliği kontrol et customer1 == customer2
False
Python'da Nesne Yönelimli Programlamaya Giriş

Nesne eşitliği

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
Python'da Nesne Yönelimli Programlamaya Giriş

Değişkenler referanstır

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>
  • print() çıktısı, değişkenin atandığı bellek konumunu gösterir
  • == veriyi değil, referansları karşılaştırır
Python'da Nesne Yönelimli Programlamaya Giriş

Özel karşılaştırma

# Aynı veriyi içeren iki farklı liste
list_one = [1,2,3]
list_two = [1,2,3]

list_one == list_two
True
Python'da Nesne Yönelimli Programlamaya Giriş

__eq__() yöntemi

  • __eq__(), == ile bir sınıfın 2 nesnesi karşılaştırıldığında çağrılır
  • 2 argüman alır: self ve other — karşılaştırılacak nesneler
  • Boolean döndürür
Python'da Nesne Yönelimli Programlamaya Giriş

__eq__() yöntemi

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

# == kullanıldığında çağrılır def __eq__(self, other):
# Yazdırma print("__eq__() is called") # Tüm öznitelikler eşleşirse True döndürür return (self.acc_id == other.acc_id) and (self.name == other.name)
Python'da Nesne Yönelimli Programlamaya Giriş

Nesnelerin karşılaştırılması

# İki eşit nesne
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(123, "Maryam Azar")

customer1 == customer2
__eq__() is called
True
# İki eşit olmayan nesne - farklı id'ler
customer1 = Customer(123, "Maryam Azar")
customer2 = Customer(456, "Maryam Azar")

customer1 == customer2
__eq__() is called
False
Python'da Nesne Yönelimli Programlamaya Giriş

Tür kontrolü

  • Farklı sınıflardan iki nesnenin aynı öznitelik ve değerlere sahip olması durumunda ne olur?
    • Python onları eşit değerlendirir
class Customer:
    def __init__(self, acc_id, name):
        self.acc_id, self.name = idacc_id name

    def __eq__(self, other):
        # Nesneler aynı özniteliklere
        # ve aynı türe sahipse True döndürür
        return (self.acc_id == other.acc_id) and (self.name == other.name)\
            and (type(self) == type(other))
Python'da Nesne Yönelimli Programlamaya Giriş

Diğer karşılaştırma operatörleri

Operatör Yöntem
== __eq__()
!= __ne__()
>= __ge__()
<= __le__()
> __gt__()
< __lt__()
  • Bir sınıf içinde tanımlayarak özelleştirin
Python'da Nesne Yönelimli Programlamaya Giriş

Hadi pratik yapalım!

Python'da Nesne Yönelimli Programlamaya Giriş

Preparing Video For Download...