Nesne tabanlı programlama - kalıtım/miras alma

Ark_Us

Megapat
Katılım
7 Nisan 2017
Mesajlar
907
Makaleler
1
Çözümler
7
Herkese merhaba.
Başlıktaki konuyu öğrenemeye çalışıyorum ama beni bir miktar zorluyor.

Python:
# Inheritance (Kalitim): Miras alma.

# Person => name, lastname , age, eat(), run(), drink()
# Student(Person), Teacher(Person)

# Animal => Dog(Animal), Cat(Animal)

class Person():
 def __init__(self ,fname , lname):
 self.firstname = fname.
 self.lastname = lname.
 print("person Created")

class Student(Person):
 def __init__(self, fname , lname):
 Person.__init__(self, fname , lname)
 print("student Created")

p1 = Person()
s1 = Student()

Miras almayı iyi kötü anladım sayılır da ama def __init__(self, fname, lname): ve person. __init__(self, fname, lname) neden böyle yazıldı anlamıyorum.
Böyle yazılmasındaki amaç ne ve bu kod bloğu nasıl çalışıyor?
 
Son düzenleyen: Moderatör:
init bir sınıfın bir nesnesini oluştururken sahip olduğu değişkenlere ilk değerlerini vermek için kullandığımız bir fonksiyon, self ise nesnenin kendisini daha doğrusu bellekteki adresini ifade eder bu bakımdan C++'da ki this pointer'ina benzer.

nesne = Person() dediğimizde nesne oluşturulur, burada self.firstname demek aslında nesne.firstname demek çünkü bellek adresi olarak nesne'nin kendisidir.
 
Cevap için teşekkürler init fonksiyonunu anlatmanız iyi oldu tam olarak ne işe yaradıgını bilmiyordum self parametresine şunu söyleyebilirmyiiz atıyorum P1 = person() dedğimiz zaman personun içinede bir değer gönderelim bu değeri alan self değilmi ? birde kodun tamamını göze alarak anlatırsanız çok daha iyi olur.
 
Değeri alan self değil, self oluşturulan nesnenin bellek adresini gösterir yani bu kod için P1'in adresini, sınıfta yazdığımız self kodu çalıştırdığımızda her nesne için farklı değerler alır, yani farklı bellek adreslerine işaret eder. Parametre olarak yazıyoruz ancak değerini biz vermiyoruz runtime'da otomatik atanıyor.

bunu sana ancak şöyle gösterebilirim;

Adsız.png
 
Hmm yani biz sefl. Fname dediğimiz zaman nesneye(ya da __init__) alcağın verinin yerinimi göstermiş oluyoruz doğru mu anladım?

nesne = Person() dediğimizde nesne oluşturulur, burada self.firstname demek aslında nesne.firstname demek çünkü bellek adresi olarak nesne'nin kendisidir.

Ben bu yazıyı yeni fark ettim :D bu daha açıklayıcı oldu.
Bu aynı şeye benziyor bir liste oluşturusun listeye eleman atman gerekiyor bu liste a olsun.
A = ["ali" , "mehmet" ,"cengiz"]
Ben buna bir eleman atmak istedigim zaman burada append metodu nu kullanıyoruz.
Oda a. Append("Ali") aynı buna benziyor.
o zaman
class Person():
def __init__(self ,fname , lname):
self.firstname = fname.
self.lastname = lname.
print("person Created"
bu kodu şöyle anladım
a = person("ali" , "mehmet") yazdığımız zaman init bu 2 değeri alır self in yanında ki değişkenlere atar bunu yaparkende sefl kullanır self.firstname = name de ben bunu şöyle öğrenmiştim a değişkenin içine firstname alanı oluşturulup alınan değeride bu alanın içine atıldığı söylenmişti umarım doğru anlamışımdır
Şu kodun naıl çalıştıgını ciddi ciddi bilen hiç kimse yok mu?
Class student(person): Sonrası nasıl çalıştığını illaki bilen vardır ya.
 
Son düzenleme:

Technopat Haberler

Yeni konular

Geri
Yukarı