Sınıf Ve Fonksiyon Arasındaki Fark Nedir?


#1

Merhaba Hocalarım Bir Sorum Olucak Kusurum Olursa Affola…Ben Bu Pythonda Hatta Tüm Programlama Dillerinde Bazılarında metot diye geçiyor ama şu class ve fonksiyonları bir türlü anlayamadım yani fonksiyonları anladım fakat classla ne farkı var class kullanmamıza gerek var mı illa vesaire onu anlayamadım…Bazı yerde adam her işi tekrar yapmaktansa classla girer yaparız diyor aynısı fonksiyondada olmuyor mu? Lütfen beni aydınlatın :slight_smile: Hepinize Teşekkürler Şimdiden Hepinize minnettarım :slight_smile:


#2

İkisi bambaşka terimler ayrıca python ikisini de kullanmaya zorlamaz.
Eğer sınıf kavramını anlamadıysanız sıkıntı etmeyin onu belgeleri okudukça anlarsınız.
Anlamamanızın sebebi ilk dilinizin python olması(Sınıf yapısı olmadan tüm işlerinizi halledebilmeniz.). Ben de ilk okuduğumda anlamamıştım.


#3

Hocam Sınıf yapısını ama neredeyse tüm programlarda görüyorum bu kadar mı önemli anlamadım ki… Birde ben belgeleri okurken sıkılıyorum çabucak tavsiyeniz olur mu sıkılmamak için?


#4

Sınıfları bir de istihza kitabından okumanızı tavsiye ederim konuları basit bir şekilde anlatıyor. Ben bile altyapım olmamasına rağmen anlamıştım :slight_smile:


#5

Hocam Peki Okurken Sıkılmamak İçin Ne Önerirsiniz?


#6

O konuda pek bişey diyemem kişiden kişiye değişir, ama eğer konuları öğrendikten sonra alıştırma yapmıyorsanız alıştırma yapmanızı tavsiye ederim. Hem konuyu pekiştirmiş olursunuz hemde öğrendiklerinizle bişeyler yapınca tatmin olursunuz, hevesiniz artar diye düşünüyorum :slight_smile:


#7

Evet aslında önemli. Hatta bazı durumlarda sınıf kullanmadan istenilen işlemi yapmanın başka bir yolu yok. Mesela sizinle iki tane örnek paylaşayım.

Bu örneklerden birincisinde hiç sınıf kullanılmamış. İstenirse kullanılabilir ama gereği yok.

Kodlar:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

try:
    import Tkinter as tk
except ImportError:
    import tkinter as tk

root = tk.Tk()


def widgetleri_olustur():
    for i, j in enumerate(("Çalıştır", "Temizle")):
        text = tk.Text(master=root)
        text.grid(row=0, column=i)
        button = tk.Button(master=root, text=j)
        button.grid(row=1, column=i)
        yield text
        yield button


t1, b1, t2, b2 = widgetleri_olustur()


def command1():
    t2.insert("insert", t1.get("1.0", "end"))


def command2():
    t2.delete("1.0", "end")


b1.configure(command=command1)
b2.configure(command=command2)
root.mainloop()

Yukarıdaki kodlar, iki tane text ve button widgeti olan basit bir uygulamaya ait. Soldaki text widgetine yazdığınız yazı, Çalıştır düğmesine basınca, sağdaki text widgetine aynen aktarılıyor. Temizle düğmesi de sağdaki text widgetine aktarılmış yazıyı temizliyor. Bütün olayı bu programın. Ve bu uygulama için class kullanmaya gerek yok.

Şimdi de ikinci uygulamayı bir inceleyin.

Kodlar:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys
try:
    import Tkinter as tk
except ImportError:
    import tkinter as tk

root = tk.Tk()


def widgetleri_olustur():
    for i, j in enumerate(("Çalıştır", "Temizle")):
        text = tk.Text(master=root)
        text.grid(row=0, column=i)
        button = tk.Button(master=root, text=j)
        button.grid(row=1, column=i)
        yield text
        yield button


t1, b1, t2, b2 = widgetleri_olustur()


class StdIOYonlendiricisi:
    """
    Bu sınıfta sys.stdout'un write, flush
    özelliklerine benzer özellikler tanımladık.
    Bu özelliklerin yapısı, widgetin
    yapısına uygun olacak şekilde düzenlendi.
    Böylece standart çıktıları bir widgete yönlendirebiliriz.
    """
    def __init__(self, text):
        self.text = text

    def write(self, string):
        self.text.insert("insert", string)

    def flush(self):
        self.text.update()


sys.stdout = StdIOYonlendiricisi(text=t2)
sys.stderr = StdIOYonlendiricisi(text=t2)


def command1():
    exec(t1.get("1.0", "end"))


def command2():
    t2.delete("1.0", "end")


b1.configure(command=command1)
b2.configure(command=command2)
root.mainloop()

İşte bu son örnekte sınıfı kullanmamızın bir amacı var. Ve bir fonksiyon, bu örnekte sınıfın yaptığı işlemi yapamaz. Belki başka türlü de standart çıktı konumları bir widgete yönlendirilebilir, ama ben henüz nasıl yapıldığını bilmiyorum.

Bazen sınıflar şu amaçla da kullanılıyor: Oluşturmak istediğimiz sınıf başka bir sınıfın bütün özelliklerini miras almış oluyor. Miras alınan sınıfın bir veya bir kaç metodunu kendi oluşturduğumuz sınıfta override etmek isteyeceğimiz bir durumla karşılaşabiliyoruz (yani miras aldığımız sınıfın metodu yerine, kendi yazdığımız metodu kullanmak istiyoruz.).


Bir başka kod editörü: Visual Python
#8

Okumanız bittikten sonra yapmak için bir ödül koyun. Bu motive olmanızı sağlar.


#9

Hepinize teşekkür ederim hocam sınıf kavramını iyi öğrenmek gerekiyor yani…Yine bir sorumu cevapladığınız için teşekkürler çok sağolun :slight_smile: