وارثت (Inheritance) ایک کلاس (سب کلاس یا بچہ کلاس) کو دوسری کلاس (سپر کلاس یا والد کلاس) کی فیلڈز اور میتھڈز کو دوبارہ استعمال اور بڑھانے کی اجازت دیتی ہے۔ یہ is-a تعلق کو ظاہر کرتی ہے: Dog ایک Animal ہے۔
class Animal:
def __init__(self, name):
self.name = name
def eat(self):
return f"{self.name} is eating"
class Dog(Animal): # Dog inherits everything from Animal
def bark(self): # ...and adds new behavior
return "Woof!"
d = Dog("Rex")
print(d.eat()) # "Rex is eating" → inherited, not rewritten
print(d.bark()) # "Woof!" → Dog-specific
Dog نے __init__ اور eat مفت میں حاصل کیے اور bark شامل کیا۔ سب کلاس وراثت میں ملے ہوئے میتھڈز کو override کر سکتی ہے تاکہ رویہ بدل سکے۔
| فائدہ | خطرہ |
|---|---|
| مشترک کوڈ کو دوبارہ استعمال کریں | والد سے سخت coupling |
| حقیقی درجہ بندیوں کو ماڈل کریں | نازک بنیاد کلاس — والد میں تبدیلیاں بچوں کو توڑتی ہیں |
| مشترک قسم کے ذریعے Polymorphism | گہری ٹری کو سمجھنا مشکل ہو جاتا ہے |
ایک عام رہنمائی: جب تعلق واقعی "has-a" ہے، نہ کہ "is-a"، تو composition کو وارثت پر ترجیح دیں۔
وارثت سب سے غلط استعمال شدہ OOP خصوصیت ہے: اسے صرف کوڈ شیئر کرنے کے لیے استعمال کرنا بہت دلکش ہے، جو غیر متعلقہ کلاسز کو coupling کرتا ہے۔
جب صحیح طریقے سے استعمال کیا جائے — صرف حقیقی is-a تعلقات کے لیے — یہ آپ کو دوبارہ استعمال اور Polymorphism دیتا ہے، آپ کو بہت سی subtypes کو ان کی مشترک والد کلاس کے ذریعے یکساں طریقے سے سلوک کرنے دیتا ہے۔
تفصیلی جوابات کے ساتھ IT انٹرویو سوالات کی ایک لائبریری — جونیئر سے سینئر تک۔
عطیہ دیں