مرکزی مواد پر جائیں
ماڈیول 7 · سبق 2 از 4کورس میں 26/36~12 min
ماڈیول اسباق (2/4)

وراثت

وراثت آپ کو ایک نئی کلاس (** ذیلی کلاس**) بنانے دیتی ہے۔ موجودہ کلاس (بیس کلاس) سے اوصاف اور طریقے وراثت میں ملتا ہے، اور ان کو بڑھا یا اوور رائیڈ کر سکتے ہیں۔

بنیادی نحو

Python
class Animale:
    def __init__(self, nome):
        self.nome = nome

    def saluta(self):
        return f"{self.nome} fa un verso"

class Cane(Animale):       # Cane EREDITA da Animale
    def saluta(self):       # OVERRIDE del metodo
        return f"{self.nome} dice WOOF!"

a = Animale("X")
c = Cane("Fido")
a.saluta()      # 'X fa un verso'
c.saluta()      # 'Fido dice WOOF!'

Cane کو __init__ Animale سے وراثت میں ملتا ہے بغیر اسے دوبارہ لکھے۔

super(): بنیادی طریقہ کو کال کرنا

جب آپ بنیادی طریقہ بڑھانا چاہتے ہیں (اسے مکمل طور پر تبدیل نہیں کرتے)، استعمال کریں۔ super():

Python
class Animale:
    def __init__(self, nome):
        self.nome = nome

class Cane(Animale):
    def __init__(self, nome, razza):
        super().__init__(nome)    # delega alla base
        self.razza = razza

c = Cane("Fido", "Labrador")
c.nome        # 'Fido'
c.razza       # 'Labrador'

isinstance: چیک ٹائپ کریں۔

Python
isinstance(c, Cane)        # True
isinstance(c, Animale)     # True (anche la base)
isinstance(c, str)         # False

isinstance(x, BaseClass) تمام ذیلی طبقات کو بھی پہچانتا ہے: یہ وہی ہے۔ وراثت کو پولیمورفزم کے لیے مفید بناتا ہے۔

Python
animali = [Cane("Fido", "X"), Animale("Pippo")]
for a in animali:
    print(a.saluta())        # ogni oggetto risponde a suo modo

MRO (میتھڈ ریزولوشن آرڈر) - جائزہ

جب آپ کے پاس ایک سے زیادہ وراثت ہوتی ہے، تو ازگر فیصلہ کرتا ہے کہ کس ترتیب میں دیکھنا ہے۔ ایک طریقہ کے لیے MRO کی پیروی کرتے ہوئے، C3 الگورتھم کے ساتھ حساب کیا گیا۔ کے لیے 95% معاملات میں یہ جاننا کافی ہے:

  1. یہ مثال میں پہلے نظر آتا ہے،
  2. پھر اس کی کلاس میں،
  3. پھر ڈیکلریشن آرڈر میں بیس کلاسز میں۔
Python
Cane.__mro__
# (<class 'Cane'>, <class 'Animale'>, <class 'object'>)

object Python 3 میں ہر کلاس کی جڑ ہے۔

آپ کی باری

ورزش#python.m7.l2.e1
کوششیں: 0لوڈ ہو رہا ہے…

دی گئی `کلاس وہیکل: def __init__(self, brand): self.brand = brand`، __init__(self, brand, model) کے ساتھ `Car(وہیکل) کی وضاحت کریں جو super().__init__ کہتی ہے اور self.model کو اسٹور کرتی ہے۔ `a = کار('Fiat', '500')` بنائیں اور `(a.brand, a.model)` کا اندازہ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

super().__init__(برانڈ) پھر self.model = ماڈل۔

3 کوششوں کے بعد حل دستیاب ہے۔

ورزش کا جائزہ لیں۔

ورزش#python.m7.l2.e2
کوششیں: 0لوڈ ہو رہا ہے…

`کلاس شیپ: ڈیف ایریا (سیلف): واپسی 0` اور `کلاس اسکوائر (شکل)` کی وضاحت کریں __init__(self, side) اور area() جو سائیڈ * سائیڈ کو لوٹاتا ہے۔ `q = مربع(5)` بنائیں اور tuple `(q.area(), isinstance(q, Shape)` کا اندازہ کریں۔

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

self.side * self.side.

3 کوششوں کے بعد حل دستیاب ہے۔

اضافی چیلنج

ورزش#python.m7.l2.e3
کوششیں: 0لوڈ ہو رہا ہے…

Create a class `Square` that inherits from the `Rectangle` class (defined below). The constructor of `Square` must take a single parameter `side` and pass it to `super().__init__(side, side)`. Instantiate a square with side `6` in `sq` and evaluate `sq.area()`.

ایڈیٹر لوڈ ہو رہا ہے…
اشارہ دکھائیں۔

Declare class Square(Rectangle): and call super().__init__(side, side) in the constructor.

3 کوششوں کے بعد حل دستیاب ہے۔