OOP de sade cls() içinde parametre kullanılması nasıl oluyor

@classmethod
def isbnden(cls, isbn):
cls(isbn, 0)

cls içindeki parametreleri anlayamadım

Anlamadığınız kısmı biraz açar mısınız?

cls, metodun ait olduğu sınıfın kendisi oluyor. Mesela linkteki örnekte Sorgu. cls(isbn, 0) da örnekte Sorgu(isbn, 0) ile eşdeğer. Sorgu yerine cls kullanılmasının sebebi de Sorgu'yu miras alan sınıfların kendisini örneklendirebilmesi.

1 Beğeni

Merhaba hoş geldiniz.

cls(isbn, 0) ifadesini anlamak için önce __init__ metoduna bakmamız gerekiyor. Çünkü cls() ifadesi, yapıcı fonksiyonu yani __init__ metodunu çağırır.

__init__ metodu şu şekilde:

class Sorgu():
    def __init__(self, değer=None, sıra=None):
        self.liste = [('9789753424080', 'Greenberg', 'Sana Gül Bahçesi Vadetmedim', 'Metis'),
                      ('975872519X', 'Evren', 'Postmodern Bir Kız Sevdim', 'İthaki'),
                      ('9789754060409', 'Nietzsche', 'Böyle Buyurdu Zerdüşt', 'Cem')]

        if not değer and not sıra:
            l = self.liste
        else:
            l = [li for li in self.liste if değer == li[sıra]]

        for i in l:
            print(*i, sep=', ')

__init__ metodunda iki adet parametre yer aldığını görüyorsunuz. Bu __init__ metodundaki else satırına birazdan tekrar dönelim. Ama şimdilik sınıf metotlarına bir bakalım:

    @classmethod
    def isbnden(cls, isbn):
        cls(isbn, 0)

    @classmethod
    def yazardan(cls, yazar):
        cls(yazar, 1)

    @classmethod
    def eserden(cls, eser):
        cls(eser, 2)

    @classmethod
    def yayınevinden(cls, yayınevi):
        cls(yayınevi, 3)

Biz diyelim şöyle bir sorgu yapıyoruz.

Sorgu.yazardan("Nietzsche")

Bu yukarıdaki fonksiyon, aşağıdaki satırı çalıştıracak.

cls(yazar, 1)

yazar yani Nietzsche, __init__ metodundaki değer parametresinin değeri haline geliyor. sıra parametresi de 1 olmuş oluyor.

Yukarıda else satırına birazdan geleceğiz demiştim. Biz, Sorgu.yazardan("Nietzsche") ifadesini yazdığımızda, __init__ metodundaki else satırına geliniyor ve eğer liste'nin içindeki tuple nesnelerinin 1. indisinin elemanı Nietzsche ise, o tuple nesnesi ekrana açılarak yazdırılıyor.

Özetle buradaki her bir sınıf metodu, aslında __init__ metodunu çağırıyor. Ve her bir sınıf metodunun parametresi __init__ fonksiyonunun değer parametresinin değeri haline getiriliyor. sıra parametresi ise zaten her bir sınıf fonksiyonunun içinde hardcoded olarak tanımlanmış vaziyette.

2 Beğeni

şuan olayı kavradım @dildeolupbiten ve @EkremDincel teşekür ederim

1 Beğeni