Nesne tabanlı programlama __sub__ metodu

Nesne tabanlı programlama kullanılırken modül kaynak kodlarında bu metodun değişikliğe uğratıldığını gördüm. Bu metot fırat özgül python türkçe kılavuzunda da yazılmamış. Bu metot ne işe yarıyor?

__sub__ çıkartma işleminde kullanılan bir metottur. Tipik kullanımı şöyle:

class A:
    def __init__(self, x: int):
        self.x = x

    def __sub__(self, other: int):
        return self.x - other

a = A(x=10)
b = a.__sub__(other=2)
print(b)

Başka bir örnek:

class A:
    def __init__(self, x: int):
        self.x = x

    def __sub__(self, other: 'A'):
        return self.x - other.x

a1 = A(x=10)
a2 = A(x=5)
a3 = a1.__sub__(a2)
print(a3)
2 Beğeni

@dildeolupbiten’in örneğini biraz geliştirdim:

from __future__ import annotations

class A:
    def __init__(self, x: int):
        self.x = x

    def __sub__(self, other: A):
        return self.x - other.x

a1 = A(x=10)
a2 = A(x=5)
a3 = a1 - a2
print(a3)

Anlatmak istediklerim şunlar:

  1. a3 = a1.__sub__(a2) == a3 = a1 - a2
  2. @dildeolupbiten, 3.7’den itibaren from __future__ import annotations içe aktarması ile birlikte sınıfın kendisini tip bildirimi olarak bildirmek için bu sınıfı karakter dizisi olarak yazmamıza gerek yok. Yani senin örneğindeki def __sub__(self, other: 'A'): satırını def __sub__(self, other: A): şeklinde yazabiliriz. Python 4.0’da bu davranış varsayılan olacakmış.
4 Beğeni

Yardımlarınız için teşekkürler

1 Beğeni