Konuyu Oyla:
  • Toplam: 3 Oy - Ortalama: 3.67
  • 1
  • 2
  • 3
  • 4
  • 5
Python Dili Soru & Cevap
@Fearme23

Sadece şunu deneyerek de cls'nin nasıl çalıştığını anlayabilirsin:

PHP Kod:
class Test():
  
def __init__(self):
    print(
'__init__ çağrıldı.')

  @
classmethod
  def foo
(cls):
    
cls()

Test.foo() 

yukardaki kodun çıktısı __init__ çağrıldı olacaktır. buradan anlıyoruz ki @classmethod olarak tanımlanmış fonksiyonda cls sınıf ismi için bi shorthand'den başka birşey değil. yani
cls() ile Test() aynı işi yapıyor, yeni bir instance(örnek) oluşturuyor. ha neden böyle birşey var dersen ben de bilmiyorum Big Grin @staticmethod da aynı işi görmüyo mu nasıl olsa?



şurdan teknik ayrıntıları okuyabilirsin: https://stackoverflow.com/questions/1217...r-beginner
Ara
Cevapla
Şimdi normalde __init__ fonksiyonu, ilgili sınıf çağırılınca otomatik çalışıyor. Ama classmethod kullanımında sen çağırmazsan çalışmıyor. Classmethod ile __init__ çağırmak için cls() fonksiyonu kullanıyor.
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
aslında yine çalışır da sınıf çağırırken

Test().foo()

şeklinde çağırmak gerek veya parametre varsa

Test(parametre).foo() gibi...
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
Alıntı:Ama classmethod kullanımında sen çağırmazsan çalışmıyor.

static (durağan, sabit) denmesinin sebebi de o işte. sınıfın yeni örnekleri oluşturuldukça dinamik alt öğelerden de birer kopya oluşturulurken statik öğeler kopyalanmıyor.
Ara
Cevapla
@excel özellikle örnek çok iyi oldu teşekkür ederim Smile
gecemor şimdilik mantığını anladım hocam örnek metodu oluşturulmadan, sınıf metodu yardımıyla örnek metodları çağırılıyor. Tabii tam anlamıyla kavradım desem de yalan olur ama sanırım haşır neşir oldukça daha net kafamda oturacak. Smile
Ara
Cevapla
Aslında şu şekilde bir örnek de verebiliriz.

PHP Kod:
class ana_sinif:
    
def __init__(self):
        print 
"ana siniftan selamlar"
 
 
class ek_sinif(ana_sinif):

    @
classmethod
    def fonksiyon
(cls):
        print 
"fonksiyon'dan selamlar"

    
@classmethod
    def fonksiyon2
(cls):
        
cls() 

şimdi diyelimki bizim elimizde ana_sinif adında bir sınıf var ve buna ek olarak bir sınıf oluşturmak istedik, adını da ek_sinif koyduk ama ana sınıftan da kopmamak için parametreye ana_sinif'ı tanımladık.

Kod:
ek_sinif.fonksiyon()
şeklinde çağırırsak çıktı "fonksiyon'dan selamlar" olacaktır.

Kod:
ek_sinif.fonksiyon2()
olarak çağırdığımızda da "ana siniftan selamlar" çıktısını görürüz. Oysaki ek_sinif tan bir fonksiyon çağırmıştık ama cls() fonksiyonu bizi ana_sinif'taki __init__() fonksiyonuna yönlendirdi.

Ek olarak, eğer istersek şu şekilde de tanımlama yaparak sınıflar içindeki fonksiyonlarımızı çağırabiliriz.
Kod:
ana_sinif.fonksiyon = ek_sinif.fonksiyon
ana_sinif.fonksiyon()

tabi kullanıma göre örnekler çoğaltılabilir.
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
(11-01-2019, Saat: 00:24)gecemor Nickli Kullanıcıdan Alıntı:  Aslında şu şekilde bir örnek de verebiliriz.

PHP Kod:
class ana_sinif:
    
def __init__(self):
        print 
"ana siniftan selamlar"
 
 
class ek_sinif(ana_sinif):

    @
classmethod
    def fonksiyon
(cls):
        print 
"fonksiyon'dan selamlar"

    
@classmethod
    def fonksiyon2
(cls):
        
cls() 

şimdi diyelimki bizim elimizde ana_sinif adında bir sınıf var ve buna ek olarak bir sınıf oluşturmak istedik, adını da ek_sinif koyduk ama ana sınıftan da kopmamak için parametreye ana_sinif'ı tanımladık.

Kod:
ek_sinif.fonksiyon()
şeklinde çağırırsak çıktı "fonksiyon'dan selamlar" olacaktır.

Kod:
ek_sinif.fonksiyon2()
olarak çağırdığımızda da "ana siniftan selamlar" çıktısını görürüz. Oysaki ek_sinif tan bir fonksiyon çağırmıştık ama cls() fonksiyonu bizi ana_sinif'taki __init__() fonksiyonuna yönlendirdi.

Ek olarak, eğer istersek şu şekilde de tanımlama yaparak sınıflar içindeki fonksiyonlarımızı çağırabiliriz.
Kod:
ana_sinif.fonksiyon = ek_sinif.fonksiyon
ana_sinif.fonksiyon()

tabi kullanıma göre örnekler çoğaltılabilir.
Anladıklarımı toparlamam gerekirse,

cls parametresi,sınıf metodu altında sade bir "cls()" (tıpkı bir fonksiyon çağırır gibi.)  şeklinde kullanılınca sınıfın aslında kendisini çağırmış oluyoruz.
Ve olmazsa olmaz değil. Fakat cls()'nin bize sağladığı asıl avantaj(Örnekleme yapmadan init fonksiyonuna ulaşmak haricinde.) kodun bütünlüğünü, düzenini, görselliğini daha iyi ifade etmeye olanak sağlaması. Doğru mudur hocam ?
Ara
Cevapla
amacı sadece düzen tertip etmek değil, olmasa da olur diyemeyiz. Sadece yerine göre, kullanım alanına göre bir işlevselliği olduğunu söyleyebiliriz. Buna ancak vakti geldiğinde öyle bir metod ve fonksiyona ihtiyaç olduğunda daha iyi anlaşılacağını düşünüyorum.
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
Selamlar istihza pdf den nesne tabanlı programlama konusunu da bitirdim şükür. Bundan sonrası için ise PyQt5 öğrenmek istiyorum fakat öncesinde temel konularda yeterince egzersiz yapıp tecrübe kazanmak( bu süreçte temel modüller,veri tipleri vs.. tamamen benimseme), gerek elbet. Bunu için en iyi yol, bir proje belirleyip onun üzerinde çalışmak. Ezcümle proje tavsiyesinde bulunabilir misiniz acaba ?.
Kendi yaptığım sadece 2 proje var:
1- bir video sitesine selenium, kimi zaman requests ile bağlanıp beatifulsoup ile ordan gerekli alanları çekip youtube_dl ile indirme
2-Online çeviri.
Şimdiden teşekkürler.
Ara
Cevapla
(14-01-2019, Saat: 23:22)Fearme23 Nickli Kullanıcıdan Alıntı:  Selamlar istihza pdf den nesne tabanlı programlama konusunu da bitirdim şükür. Bundan sonrası için ise PyQt5 öğrenmek istiyorum fakat öncesinde temel konularda yeterince egzersiz yapıp tecrübe kazanmak( bu süreçte temel modüller,veri tipleri vs.. tamamen benimseme), gerek elbet. Bunu için en iyi yol, bir proje belirleyip onun üzerinde çalışmak. Ezcümle proje tavsiyesinde bulunabilir misiniz acaba ?.
Kendi yaptığım sadece 2 proje var:
1- bir video sitesine selenium, kimi zaman requests ile bağlanıp beatifulsoup ile ordan gerekli alanları çekip youtube_dl ile indirme
2-Online çeviri.
Şimdiden teşekkürler.

Tebrikler, seni de istihza mezunu ettik desene Smile

Evet pekiştirmek için bol bol pratik yapmak şart, tecrübe edindikçe taşlar yerine oturacak, neyin ne işe yaradığı daha iyi anlaşılacak.
Proje olarak gündelik olarak internet veya bilgisayar, hatta akıllı telefon kullanımında işine yarayabilecek irili ufaklı çalışmalar yapabilirsin.
Mesela Tkinter ile arayüz programlamaya da başlayabilirsin ufaktan ufaktan.

Hatta daha büyük projeler de düşünebilirsin. Bazıları "daha yeni başlamışsın ufak projelere yönel" gibi düşünebilir fakat hedefini ne kadar yüksek tutarsan daha iyi odaklanıp öğrenmen o kadar kısa sürer. Örneğin, ben hiç kivy bilmiyorken kafamda bir android uygulaması projesi tasarladım ve bir gün damdan düşer gibi daldım. Kivy ile ilgili doğru belli Türkçe kaynak yokken ve kodları yazdıktan sonra nasıl apk yapacağımı dahi bilmeden kolları sıvadım, bir süre sonra hem kivy öğrendim hem de uygulamamı yazmış oldum. O süreç bana daha da tecrübe kazandırdı, ingilizce kaynaklardan (github, stackoverflow) neyi nasıl aramam gerektiği ve bir konuda nasıl bilgi sahibi olacağım konusunda kendimi daha da geliştirmiş oldum.
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla

{lang: 'en'}


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  15gb .myd uzantılı dosya python ile okutma perry 1 850 27-11-2022, Saat: 17:59
Son Yorum: perry
  GÜNCEL Python request , c# request e göre çok yavaş ne yapabilirim perry 12 2,363 28-09-2022, Saat: 20:27
Son Yorum: krast
  YENİ Python Pyqt5 memory leak sorunu perry 3 907 28-09-2022, Saat: 11:33
Son Yorum: gecemor
  YENİ PYTHON ads approval CaglarDevv 2 1,109 04-07-2022, Saat: 01:23
Son Yorum: CaglarDevv
  python konusunda yardıma ihtiyacım var $cr!pt HUB 3 808 15-06-2022, Saat: 18:11
Son Yorum: CaglarDevv

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi
Change Theme