Kalıtım faydalıdır, ancak temel sınıflardaki kodları yeniden kullanarak tüm potansiyelini ortaya çıkarabilirsiniz.

Temel Çıkarımlar

  • Python'un super() işlevi, bir alt sınıftan üst sınıf yöntemlerini çağırmanıza olanak tanıyarak, kalıtım ve yöntem geçersiz kılmayı uygulamayı kolaylaştırır.
  • super() işlevi, Python'daki Yöntem Çözünürlük Sırası (MRO) ile yakından ilişkilidir; bu, ata sınıflarının yöntemler veya nitelikler için aranma sırasını belirler.
  • Sınıf yapıcılarında super() kullanmak, ana sınıfta ortak nitelikleri ve alt sınıfta daha spesifik nitelikleri başlatmak için yaygın bir uygulamadır. super() işlevinin kullanılmaması, öznitelik başlatma işlemlerinin eksik olması gibi istenmeyen sonuçlara yol açabilir.

Python'un temel özelliklerinden biri, gerçek dünyadaki varlıkları ve ilişkilerini modellemek için kullanabileceğiniz OOP paradigmasıdır.

Python sınıflarıyla çalışırken sıklıkla kalıtımı kullanacak ve bir üst sınıfın niteliklerini veya yöntemlerini geçersiz kılacaksınız. Python şunları sağlar: Süper() Üst sınıfın yöntemlerini alt sınıftan çağırmanızı sağlayan işlev.

instagram viewer

Super() Nedir ve Neden Buna İhtiyacınız Var?

Kalıtımı kullanarak mevcut bir sınıfın özelliklerini miras alan yeni bir Python sınıfı oluşturabilirsiniz. Alternatif uygulamalar sağlayarak, alt sınıftaki üst sınıfın yöntemlerini de geçersiz kılabilirsiniz. Ancak, yeni işlevi eskinin yerine kullanmak yerine, ona ek olarak kullanmak isteyebilirsiniz. Bu durumda, Süper() kullanışlı.

Şunu kullanabilirsiniz: Süper() Üst sınıf niteliklerine erişme ve üst sınıfın yöntemlerini çağırma işlevi. Süper önemli nesne yönelimli programlama çünkü mirasın ve yöntem geçersiz kılmanın uygulanmasını kolaylaştırır.

super() Nasıl Çalışır?

Dahili olarak, Süper() yakından ilişkilidir Yöntem Çözümleme Sırası (MRO), Python'da C3 Doğrusallaştırma algoritmasının belirlediği.

İşte nasıl Süper() İşler:

  1. Geçerli sınıfı ve örneği belirleyin: Aradığın zaman Süper() Bir alt sınıfın yönteminin içinde Python, geçerli sınıfı (çağıran yöntemi içeren sınıf) otomatik olarak bulur. Süper()) ve bu sınıfın örneğini (yani, öz).
  2. Süper sınıfı belirleyin: Süper() açıkça iletmeniz gerekmeyen iki argümanı (geçerli sınıf ve örnek) alır. Yöntem çağrısını devredecek üst sınıfı belirlemek için bu bilgiyi kullanır. Bunu sınıf hiyerarşisini ve MRO'yu inceleyerek yapar.
  3. Yöntemi Süper Sınıfta çağırın: Üst sınıf belirlendikten sonra, Süper() yöntemlerini doğrudan alt sınıftan çağırıyormuşsunuz gibi çağırmanıza olanak tanır. Bu, üst sınıftaki orijinal uygulamayı kullanmaya devam ederken yöntemleri genişletmenize veya geçersiz kılmanıza olanak tanır.

Bir Sınıf Oluşturucuda super() işlevini kullanmak

Kullanma Süper() Bir sınıf yapıcısında kullanmak yaygın bir uygulamadır, çünkü genellikle ana sınıfta ortak nitelikleri ve alt sınıfta daha spesifik nitelikleri başlatmak isteyeceksiniz.

Bunu göstermek için, Python sınıfını tanımlayın, Baba, hangi bir Oğul sınıf aşağıdakilerden miras alır:

classFather:
def__init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name

classSon(Father):
def__init__(self, first_name, last_name, age, hobby):
# Call the parent class constructor (Father)
super().__init__(first_name, last_name)

self.age = age
self.hobby = hobby

defget_info(self):
returnf"Son's Name: {self.first_name}{self.last_name}, \
Son's Age: {self.age}, Son's Hobby: {self.hobby}"

# Create an instance of the Son class
son = Son("Pius", "Effiong", 25, "Playing Guitar")

# Access attributes
print(son.get_info())

İçinde Oğul yapıcı, çağrı süper().init() çağırır Baba sınıf yapıcısı, onu geçerek ilk adı Ve soy isim parametreler olarak. Bu, Baba sınıf yine de ad niteliklerini doğru bir şekilde ayarlayabilir. Oğul nesne.

Eğer aramazsan Süper() bir sınıf kurucusunda, onun üst sınıfının kurucusu çalışmayacaktır. Bu, öznitelik başlatma işlemlerinin eksik olması veya üst sınıfın durumunun eksik ayarlanması gibi istenmeyen sonuçlara yol açabilir:

...
classSon(Father):
def__init__(self, first_name, last_name, age, hobby):
self.age = age
self.hobby = hobby
...

Şimdi aramayı denerseniz bilgi almak yöntemi yükseltecektir. ÖzellikHatası Çünkü self.first_name Ve self.soyadı_adı öznitelikler başlatılmadı.

Sınıf Yöntemlerinde super() kullanımı

Kullanabilirsiniz Süper() yapıcıların dışında diğer yöntemlerde de aynı şekilde. Bu, üst sınıfın yönteminin davranışını genişletmenize veya geçersiz kılmanıza olanak tanır.

classFather:
defspeak(self):
return"Hello from Father"

classSon(Father):
defspeak(self):
# Call the parent class's speak method using super()
parent_greeting = super().speak()
returnf"Hello from Son\n{parent_greeting}"

# Create an instance of the Son class
son = Son()

# Call the speak method of the Son class
son_greeting = son.speak()

print(son_greeting)

Oğul sınıf miras alır Baba ve onun var konuşmak yöntem. konuşmak yöntemi Oğul sınıf kullanımları süper().speak() aramak konuşmak yöntemi Baba sınıf. Bu, ana sınıftan gelen mesajın eklenmesine ve alt sınıfa özel bir mesajla genişletilmesine olanak tanır.

Kullanmamak Süper() bir yöntemin diğerini geçersiz kılması, ana sınıf yönteminde mevcut olan işlevselliğin etkili olmayacağı anlamına gelir. Bu, yöntem davranışının tamamen değiştirilmesiyle sonuçlanır ve bu da istemediğiniz davranışa yol açabilir.

Yöntem Çözümleme Sırasını Anlama

Yöntem Çözümleme Sırası (MRO), bir yönteme veya özniteliğe eriştiğinizde Python'un ata sınıflarını arama sırasıdır. MRO, Python'un birden fazla miras hiyerarşisi mevcut olduğunda hangi yöntemin çağrılacağını belirlemesine yardımcı olur.

classNigeria():
defculture(self):
print("Nigeria's culture")

classAfrica():
defculture(self):
print("Africa's culture")

Bir örneğini oluşturduğunuzda şunlar olur: Lagos sınıfa girin ve arayın kültür yöntem:

  1. Python şunu arayarak başlar: kültür yöntemdeki Lagos sınıfın kendisi. Eğer bulursa metodu çağırır. Değilse ikinci adıma geçilir.
  2. Eğer bulamazsa kültür yöntemdeki Lagos Python, temel sınıflara sınıf tanımında göründükleri sıraya göre bakar. Bu durumda, Lagos ilk olarak miras alır Afrika ve sonra Nijerya. Yani Python şunu arayacaktır: kültür yöntem Afrika Birinci.
  3. Eğer bulamazsa kültür yöntemdeki Afrika sınıf, Python daha sonra Nijerya sınıf. Bu davranış hiyerarşinin sonuna ulaşana kadar devam eder ve üst sınıfların hiçbirinde yöntemi bulamazsa hata atar.

Çıktı, Yöntem Çözünürlük Sırasını gösterir. Lagos, soldan sağa başlayarak.

Yaygın Tuzaklar ve En İyi Uygulamalar

İle çalışırken Süper()Kaçınılması gereken bazı yaygın tuzaklar vardır.

  1. Özellikle çoklu devralma senaryolarında Yöntem Çözümleme Sırasına dikkat edin. Karmaşık çoklu kalıtımı kullanmanız gerekiyorsa, aşağıdakilere aşina olmalısınız: C3 Doğrusallaştırma algoritması Python'un MRO'yu belirlemek için kullandığı.
  2. Sınıf hiyerarşinizde öngörülemeyen davranışlara yol açabilecek döngüsel bağımlılıklardan kaçının.
  3. Kodunuzu açıkça belgeleyinözellikle kullanırken Süper() diğer geliştiriciler için daha anlaşılır hale getirmek için karmaşık sınıf hiyerarşilerinde.

super() işlevini Doğru Şekilde Kullanın

Python'un Süper() işlev, miras ve yöntem geçersiz kılma ile çalışırken güçlü bir özelliktir. Nasıl olduğunu anlamak Süper() çalışmalar ve en iyi uygulamaları takip etmek, Python projelerinizde daha sürdürülebilir ve verimli kod oluşturmanıza olanak tanır.