Python mirası

Python işlevleri ve meth

Python mirası, bir alt sınıfın başka bir sınıfın kodunu kullanmasıdır. Kalıtım, Python gibi nesne yönelimli dillerde kodlamayı daha kolay ve daha verimli hale getiren önemli bir özelliktir. 

Python nesne yönelimli bir dildir, yani kodun daha verimli olmasına yardımcı olmak için yeniden kullanılabilir kod blokları oluşturmayı destekler. Bunun olmasının yollarından biri, bir alt sınıfın başka bir sınıfın kodunu kullanabileceği kalıtımdır.

Örneğin, “banka hesaplarını” depolayan bir sınıfınız olabilir ve bir sınıf oluşturmak isteyebilirsiniz. “altın banka hesaplarını” “banka hesaplarında” Mevcut sınıf.

Bu öğreticide, Python'da kalıtımın temellerini inceleyeceğiz. Ayrıca, üst ve alt Python sınıflarının nasıl çalıştığını ve sınıf nesneleriyle çalışırken özniteliklerin ve yöntemlerin nasıl geçersiz kılınacağını tartışacağız.




Python Kalıtımı

Devralma bir terimdir. başka bir sınıf içindeki bir Python sınıfını tanımlamak için kullanılır. alt sınıflar veya alt sınıflar olarak adlandırılan sınıflar, gerçek dünyada çocukların özellikleri ebeveynlerinden devralmasına benzer şekilde, üst sınıflardan değerleri devralabilir.

Devralma yararlıdır, çünkü bu türleri birden çok kez bildirmek zorunda kalmadan bir üst sınıfla aynı değer türlerine sahip alt sınıflar oluşturmamıza olanak tanır.




Üst öğe. Sınıflar

Üst sınıflar (temel sınıflar olarak da adlandırılır) alt sınıfların erişebileceği ana yapıyı oluşturur. üst sınıftan sınıf yöntemleri.

Bunun nasıl çalıştığını göstermek için bir örnek kullanalım. İki farklı banka hesabı türüyle çalışan bir programımız olduğunu varsayalım: ebeveyn ve çocuk.

p>

Katılımcıların %81'i, bir eğitim kampına katıldıktan sonra teknik iş beklentileri konusunda daha emin hissettiklerini belirtti. amp bugün.

Ortalama bir eğitim kampı mezunu, bir eğitim kampına başlamaktan ilk işini bulmaya kadar, kariyer geçişinde altı aydan az zaman harcadı.

Bu hesapların ikisi de banka hesaplarıdır ve bu nedenle benzer değerlere sahip olacaklardır. Ancak bu hesapların her biri kendi benzersiz bilgilerini gerektirebilir. Örneğin, bir ebeveynin hesabı kredili mevduatı destekleyebilirken çocuğun hesabı yalnızca kendi bakiyesiyle çalışabilir.

Dolayısıyla, bu değerlerle bir program oluşturmak istiyorsak, önce şunu tanımlarız: banka hesabımız için bir sınıf (bir üst sınıf), ardından desteklemek istediğimiz iki tür banka hesabı için (ebeveyn ve çocuk) alt sınıflar oluşturun.

İşte bir üst sınıf bildirme örneği bir banka hesabı için:

class BankAccount: def __init__(self, name, soyname, bakiye): self. önad = önad self.surname = soyadı self.balance = bakiye

Üç değeri saklayan BankAccount sınıfını oluşturduk: ad, soyad ve bakiye. Ayrıca sınıfımıza şu şekilde yöntemler ekleyebiliriz:

class BankAccount: def __init__(self, forename, soyadı, bakiye): self.adı = önad self.surname = soyadı self.balance = bakiye def getDetails(self): print("Adı: ", kendi.adı) print("Soyadı: ", kendi.soyad) def getBalance (self): print("Balance: $ ", self.balance)

Sınıfımız şimdi üç değeri ve iki yeni yöntemi saklıyor: ayrıntılar ve denge. detaylar yöntemi hesap sahibinin adını ve soyadını öğrenmek için kullanılabilir ve denge yöntemi hesap sahibinin bakiyesini döndürür.


BankAccount sınıfımızda bildirdiğimiz her yöntem ve değişken, alt sınıfımızda erişilebilir olacaktır.

Örneklemek için Eylemdeki sınıfımız, örnek bir banka hesabı oluşturalım. Bunu aşağıdaki kodu kullanarak yapabiliriz:

Bu, John Appleseed için 100$ içeren bir hesap oluşturacaktır. Şimdi hesabımız hazır olduğuna göre, diğer sınıflarda yaptığımız gibi ona referans vermeye başlayabiliriz.İşte banka hesabımızda ne kadar para olduğunu öğrenmek için getBalance() yöntemini çalıştırdığımıza bir örnek. elimizdeki para:

print(account.getBalance())

Programımız şunu döndürür:

Bakiye: 100 $
 


Alt Sınıflar

Yukarıdaki örnekte, banka hesaplarını saklayan bir üst sınıf ilan ettik. Ancak, 18 yaşından küçük bir çocuğun hesabı gibi belirli bir hesap türü hakkında bilgi depolamak istersek ne olur? Alt sınıflar burada devreye girer.

Alt sınıflar veya alt sınıflar, üst sınıftan değerleri devralır. Bu, her alt sınıfın üst sınıfımızda bildirdiğimiz yöntemlere ve değişkenlere başvurabileceği anlamına gelir.

Öyleyse, bir ChildBankAccount için bir alt sınıf oluşturmak istediğimizi varsayalım. . Bu hesap, kullanıcının banka hesabı bilgilerini—adını ve bakiyesini—ve ayrıca kısıtlı adlı yeni bir değere sahip olmalıdır. Bu değer, 18 yaşın altında oldukları ve tam bir banka hesabı için uygun olmadıkları için bir çocuğun hesabında saklanacaktır.

Bir alt sınıf oluşturmak için aşağıdaki kodu kullanabiliriz:< /p>

class ChildBankAccount(BankAccount):

ChildBankHesabı sınıfı, BankAccount sınıfının alt öğesi olur, çünkü BankAccount parantez içine alınır. Alt sınıfımızın üst sınıfımızla tam olarak aynı değerlere sahip olmasını istiyorsak—BankAccountpass anahtar kelimesini şu şekilde kullanabiliriz:

class ChildBankAccount(BankAccount): pass

Ancak daha önce tartıştığımız gibi, alt hesabımızın özel bir değer depolamak için: kullanıcının hesabının kısıtlandığını söyleyen bir değişken.

Bu hedefi gerçekleştirmek için restricted adlı yeni bir değer ekleyeceğiz. çocuk sınıfı. Bunu aşağıdaki kodu kullanarak yapabiliriz:

class ChildBankAccount(BankAccount): def __init__(self, forename, soyadı, bakiye, kısıtlı=Doğru): self.adi = önad self.surname = soyadı self.balance = bakiye self.restricted = kısıtlı def isRestricted(self): print("Kullanıcı 18 yaşından küçük olduğundan bu hesap kısıtlanmıştır." )

Şimdi kodumuzu parçalayalım.

Yukarıdaki kodda ChildBankHesaplarımızın dört değer tutmasını istediğimizi belirtiyoruz: ad, soyad, dengeli ve kısıtlı.

"Python.Engineering hayatıma en çok ihtiyacım olduğu anda girdi ve hızlı bir şekilde bir eğitim kampıyla eşleşmeme yardımcı oldu. Mezun olduktan iki ay sonra, hayalimdeki işi, değerlerim ve hedeflerim ile uyumlu buldum. life!"

Venus, Rockbot'ta Yazılım Mühendisi

İlk üç—adı, soyadı ve bakiye—bizimle aynı üst sınıf değerleri ancak kısıtlı yenidir ve çocuk sınıfımıza özeldir. Varsayılan olarak, kısıtlı, True olarak ayarlanmıştır.

Öyleyse standart bir BankHesabı oluşturursak (bir değil ChildBankAccount), kısıtlı değerine erişemeyeceğiz. Benzer şekilde, bir ChildBankAccount oluşturmadıkça isRestricted yöntemine erişemeyeceğiz.

İşte bir < oluşturma örneği. code>ChildBankAccount ve sınıfımız hakkında daha fazla bilgi edinmek için getBalance() ve isResticted() yöntemlerini kullanmak:

child_account = ChildBankAccount("Bill", "Appleseed", 100) print(child_account.getBalance()) print(child_account.isRestricted())

Kodumuz aşağıdakileri döndürür:

Bakiye: 100 $ Bu hesap kısıtlanmıştır kullanıcı 18 yaşından küçük olduğu için.

Gördüğünüz gibi programımız önce hesabı olan Bill Appleseed için yeni bir ChildBankAccount tanımlar. 100 dolar tutar. Ardından programımız, sınıfımızda kullanıcının bakiyesini döndüren getBalance() yöntemini çalıştırır. getBalance(), üst sınıfımız BankAccount'ta bildirildi, ancak devralma yoluyla ChildBankAccount tarafından erişilebilir.

Programımız, çocuğun hesabının 18 yaşından küçük olduğu için kısıtlandığını belirten isRestricted() yöntemini de yürütür. Bu sınıf ChildBankAccount'ta bildirilir. , ancak bu, BankAccount üst sınıfımız tarafından erişilebilir olmadığı anlamına gelir. Kısıtlı bir BankAccount oluşturmak istiyorsak, üst sınıfı değiştirmemiz gerekir.




Üst Yöntemleri Yeniden Tanımlama

Yukarıdaki örneğimizde, bir banka hesapları için bilgileri depolayan BankAccount adlı üst sınıf. Ayrıca, 18 yaşın altındaki hesap sahipleri için bilgileri depolayan ChildBankAccount adında bir alt sınıf oluşturduk. Bu sınıf, BankAccount sınıfından yöntemleri devraldı ve ayrıca 'u yarattı. isRestricted() yöntemi.

Peki ya mevcut bir üst sınıf yöntemini değiştirmek istersek? Diyelim ki BankAccount bakiyemizin bakiyelerini içeren bir mesaj ve Bir kredili mevduat hesabı için uygunsunuz şeklinde bir mesaj döndürmesini istiyoruz, ancak bunun ChildBankAccount sahipleri.

Bunu yapmak için üst yöntemimizi geçersiz kılmamız gerekiyor.

İşte revize edilmiş üst yöntemimiz BankAccount< kodu /code>, artık hesap sahiplerine bakiyelerini kontrol ettiklerinde kredili mevduat hesabı almaya uygun olduklarını söyleyen bir mesaj yazdırıyor:

class BankaHesabı: def __init__(kendi, önad, soyad, bakiye): self.adi = önad kendi.soyadı = soyad self.balance = bakiye def getDetails(self): print("Adı: ", self.adi ) print("Surname: ", self.surname) def getBalance(self): print("Balance: $ ", self.balance) print("Ek kredi için uygunsunuz.")

Şimdi, John Appleseed için yeni bir BankAccount oluşturursak ve bakiyesini yazdırdığınızda, Avantaj için uygunsunuz yazan bir mesaj göreceğiz. İşte yeni bir hesap ilan edip bakiyesini kontrol etmemize bir örnek:

account = BankAccount("John ", "Appleseed", 100) print(account.getBalance())

Kodumuz şunu döndürür:

Bakiye: 100 $ Kredili mevduat hesabı için uygunsunuz.

Ancak bu değişiklik aynı zamanda ChildBankHesabımız anlamına da geliyor. değerlerini BankAccount'tan devralırsa, mesajı da görür. İşte, BankAccount üst sınıfımız değiştiğine göre bir ChildBankAccount oluşturmamıza ve bakiyesini kontrol etmemize bir örnek:

child_account = ChildBankAccount("Bill", "Appleseed", 100) print(child_account.getBalance())

Kodumuz getiriler:

Bakiye: 100 $ Kredili mevduat hesabı için uygunsunuz.
< p>Genellikle çocuklara kredili mevduat hesabı verilmediğinden, kodumuzda bir değişiklik yapmamız gerekecek. Şimdi, bunu yapabilmek için, ChildBankAccount sınıfımızı değiştirmeli ve yeni bir getBalance() işlevi bildirmeliyiz.


ChildBankHesabı için yukarıdaki kod:

class ChildBankHesabı(BankHesabı): def __init__(kendi, ad, soyadı, bakiye, kısıtlı=Doğru): self.adı = adı kendi.soyadı = soyadı self.balance = bakiye self.restricted = kısıtlı def isKısıtlı( self): print("Kullanıcı 18 yaşından küçük olduğundan bu hesap kısıtlanmıştır.")

Yeni bir fonksiyon eklemek için bu kodu değiştirmemiz gerekiyor: getBalance(). Bu işlev, üst sınıfımızda bildirdiğimizle aynı şekilde çalışacak, ancak kredili mevduat hesaplarıyla ilgili mesajı içermeyecek. Yeni işlevimizi bildirmek için ekleyeceğimiz kod:

… def getBalance(se lf): print("Balance: $ ", self.balance)

Çocuğumuzun bakiyesini şimdi almaya çalışalım:

child_account = ChildBankAccount("Bill", "Appleseed", 100) print(child_account.getBalance())

Kodumuz şunu döndürür:

Bakiye: 100 $

In yukarıdaki örnekte, ChildBankAccount alt sınıfındaki getBalance() yönteminin üzerine yazdık. ChildBankAccount için yeni getBalance() yöntemimiz yalnızca kullanıcının bakiyesini gösterir. Ancak BankAccount sınıfımızda, getBalance() yöntemi hem kullanıcının bakiyesini hem de Bir kredili mevduat hesabı için uygunsunuz mesajını gösterir.< /p>

Üst yöntemleri geçersiz kılmak, üstlerine benzer yöntemler kullanabilen, ancak kendi özel değişikliklerinin yapılmasını gerektiren birden fazla alt yönteminiz olduğunda yararlı olabilir. Yukarıdaki durumda olduğu gibi, ana banka hesaplarımızın bir kredili mevduat mesajı görmesini istiyoruz, ancak alt banka hesaplarımızı değil, bu nedenle ChildBankAccount'daki ana yöntemimizi geçersiz kıldık.




Sonuç

Kalıtım, bir üst sınıfta önceden bildirilmiş değerleri depolayabilen alt sınıflar oluşturmanıza yardımcı olmak için nesne yönelimli programlamada kullanılır. Bu, benzer değerleri depolayacak benzer sınıflar oluştururken kullanışlıdır çünkü bu sınıfları oluşturmak için kodunuzu defalarca tekrarlamadan kalıtımı kullanabilirsiniz.

Bu öğreticide, Python'da kalıtımın rolünü araştırdık. . Ayrıca kalıtımın ve ebeveyn ve alt sınıfların nasıl çalıştığını tartıştık, ardından ebeveyn yöntemlerinin nasıl geçersiz kılınacağını araştırdık. Artık bir Python uzmanı gibi sınıflar ve kalıtımla çalışmaya hazırsınız!





Python mirası: StackOverflow Questions