OOP Sınıf metodu


#1

Ek%20A%C3%A7%C4%B1klama%202019-01-10%20131623

Selamlar. Pdf’nin kendi örneği üzerinde anlamadığım bir nokta var yardımcı olursanız sevinirim. Maruzatım;

Mavi olarak seçtiğim kısım neden init fonksiyonunu tetikliyor. Bir iki konu öncesinde oranın sadece örnek tanımlandığı zaman otomatik tetiklendiği ifade edilmişti. Sınıf metodundaki ‘cls’ parametresinin işlevini tam kavrayamadığımı farkettim.

Sorgu.isbnden(‘9789754060409’) şeklinde çalışıyor


#2

Nasıl ki siz Sorgucu(...) dediğinizde yeni bir nesne oluşuyor ve __init__ içindeki ifadeler çalıştırılıyor, Sorgucu.isbnden(...) dediğinizde de bir nesne oluşması ve __init__ içindeki ifadelerin çalıştırılması için cls(isbn, 0) deyimi çalıştırılıyor. Aslında bu Sorgucu(isbn, 0) demek ile aynı. Eğer bunu yazmazsanız yeni bir nesne oluşmaz ve ilklendirme ifadeleri çalıştırılmaz.

Öte yandan neden isbnden metodunun oluşturulan nesneyi döndürmediğini anlamadım. Bence cls(isbn, 0) deyiminin öncesinde return ifadesi yer almalı. Yoksa oluşturulan nesne kaybolur gider. Ya da yanılıyor muyum acaba? :thinking:


#3

Hocam aynen öyle bildiğim kadarıyla, ben yazıyordum ama siz geldiniz :slight_smile:
Biz Sınıf() dediğimizde dönen bellekteki id var ya, işte onun heap alanına yerleşmesi için bir değişkene atanması gerekiyor. Yoksa silinir gider . . .


#4

Cevabınızı anlamaya kafa patlatmadan evvel önce teşekkür ederim hocam. Sorduğunuz sorunu cevabı ise şöyle olabilir(olabilir diyorum bilmiyoum :)) zaten örnek olması açısından yazılmış bir kod dolayısıya ekrana çıktı vermesinden öte bir işe yaramıyor. Yani çıktı verip bellekteki değerlerin hepsi siliniyor. Yok bahsettiğiniz sınıf metodundaki degerin init fonksiyonuna bir değer döndürmesi ise, değer döndürüyor çünkü istenilen parametreye uygun çıktı veriyor.


#5

heap alanını ilk defa duyuyorum :slight_smile:


#6

#7

Teşekkürler hemen bakıyorum :slight_smile:


#8

Böyle demeyelim de şöyle diyelim buna: “init fonksiyonuna bir argüman geçiriliyor”. Diğer türlü “fonksiyondan dönen değer” ile karışabilir.