Instance method Hk

Selamlar sevgili üstatlar, aşağıda sesli veya sessiz harflerin sayısını belirten bir program var.

Bu program ;

class HarfSayacı:

    def __init__(self):

        self.sesli_harfler = 'aeıioöuü'

        self.sessiz_harfler = 'bcçdfgğhjklmnprsştvyz'

        self.sayaç_sesli = 0

        self.sayaç_sessiz = 0

    def kelime_sor(self):

        return input('Bir kelime girin: ')

    def seslidir(self, harf):

        return harf in self.sesli_harfler

    def sessizdir(self, harf):

        return harf in self.sessiz_harfler

    def artır(self):

        for harf in self.kelime:

            if self.seslidir(harf):

                self.sayaç_sesli += 1

            if self.sessizdir(harf):

                self.sayaç_sessiz += 1

        return (self.sayaç_sesli, self.sayaç_sessiz)

    def ekrana_bas(self):

        sesli, sessiz = self.artır()

        mesaj = "{} kelimesinde {} sesli {} sessiz harf var."

        print(mesaj.format(self.kelime, sesli, sessiz))

    def çalıştır(self):

        self.kelime = self.kelime_sor()

        self.ekrana_bas()

if __name__ == '__main__':

    sayaç = HarfSayacı()

    sayaç.çalıştır()

Burada anlamadığım kısım ise ;

def ekrana_bas(self):
    **sesli, sessiz = self.artır()**

sesli, sessiz = self.artır()'a baktığım zaman "(method) artır: () → tuple[int, int] " diyor. Ben bu kısmı gerçekten anlayamadım.

Yani tamam şöyle bir şey söz konusu pythonda örneğin ; a , b = 1, 2
Ama yukarıdaki ne? :S Nereyi kaçırdım acaba diye geriye bakıyorum böyle bir örnekte bulamadım. Yardımcı olur musunuz?

artır bir metotmuş (yani bir sınıfa bağlı fonksiyon), hiç parametre almıyor () ve 2-tuple döndürüyor iki eleman da tam sayı tuple[int, int]. () → tuple[int, int] kısmı type hint sayesinde anlaşılmış; bu konu forumda da şurada konuşulmuş https://forum.yazbel.com/t/bu-isaret-ne-ise-yariyor/10236. (Son yanıttaki Bir şey döndürmeyeceksek de herhangi bir şey yazmamıza gerek yok. tam olarak doğru olmayabilir.)

Yo hocam ben anlayamadım farklı biraz basit bir ornek verme şansınız var mi

Type hint kullanmadım heralde daha önce ama deneyeyim,

def f():
    return (-273, +80)

diye bir fonksiyon var. Python için yeterli bir fonksiyon yani syntax uygun bu haliyle. Ama type hinting yanlısı olanlar bununla yetinmeyelim diyorlar; fonksiyonun ne alıp verdiğinin tiplerini de yazalım daha açık olsun diyorlar:

def f() -> tuple[int, int]:
    return (-273, +80)

(3.9+ lazım direkt tuple ve int diyebilmek için; öbür türlü typing modülünden alırsınız). Gördüğünüz gibi fonksiyonun “fonksiyonu” değişmedi hala aynı işi yapıyor. Ne yapıyor? Parametre almaksızın geriye 2 adet tam sayıdan oluşan bir demet döndürüyor. Ama artık ikinci yazım ile bu daha açık olarak belirtiliyor.

Başka bir örnek:

def tekrar_et(ne: str, kac_kere: int) -> str:
    return ne * kac_kere

Parametrelerin ilkinin string olması bekleniyor diğerinin tam sayı. Geriye de yine bir string döndürülüyor.

Üstteki linkte de yazdığı üzere bu Python dilinin zorladığı ve kontrol ettiği bir şey değil; yukarıya (her ikisine de!) -> list[str, bool] da yazsanız kodu çalıştırabilirsiniz hata almadan. Ama mypy felan kullanırsanız o kontrol ediyor.

Cook Cook teşekkür ederim tamamdir şimdi biraz daha iyi anladım eve geçtiğimde pratik yapayım bununla alakalı ben bolca :slight_smile: teşekürler hocam