ਵਿਰਾਸਤ (Inheritance) ਇੱਕ ਕਲਾਸ (ਸਬਕਲਾਸ ਜਾਂ child) ਨੂੰ ਇੱਕ ਹੋਰ ਕਲਾਸ (ਸੁਪਰਕਲਾਸ ਜਾਂ parent) ਦੇ ਖੇਤਰਾਂ ਅਤੇ ਤਰੀਕਿਆਂ ਨੂੰ ਦੁਬਾਰਾ ਵਰਤਣ ਅਤੇ ਵਿਸਤਾਰ ਕਰਨ ਦਿੰਦੀ ਹੈ। ਇਹ ਇੱਕ is-a ਸਬੰਧ ਨੂੰ ਮਾਡਲ ਕਰਦੀ ਹੈ: ਇੱਕ Dog ਇੱਕ Animal ਹੈ।
ਵਿਰਾਸਤ (Inheritance) ਇੱਕ ਕਲਾਸ (ਸਬਕਲਾਸ ਜਾਂ child) ਨੂੰ ਇੱਕ ਹੋਰ ਕਲਾਸ (ਸੁਪਰਕਲਾਸ ਜਾਂ parent) ਦੇ ਖੇਤਰਾਂ ਅਤੇ ਤਰੀਕਿਆਂ ਨੂੰ ਦੁਬਾਰਾ ਵਰਤਣ ਅਤੇ ਵਿਸਤਾਰ ਕਰਨ ਦਿੰਦੀ ਹੈ। ਇਹ ਇੱਕ 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 ਕਰ ਸਕਦੀ ਹੈ ਤਾਂਜੋ ਵਿਵਹਾਰ ਬਦਲਿਆ ਜਾ ਸਕੇ।
| ਲਾਭ | ਖਤਰਾ |
|---|---|
| ਸਾਝੇ ਕੋਡ ਨੂੰ ਦੁਬਾਰਾ ਵਰਤੋ | ਪੋਤੇ ਕਲਾਸ ਨਾਲ ਮਜ਼ਬੂਤ ਬੰਧਨ |
| ਅਸਲ ਲੜੀਬੱਧ ਬਣਤਰਾਂ ਨੂੰ ਮਾਡਲ ਕਰੋ | ਕਮਜ਼ੋਰ ਆਧਾਰ ਕਲਾਸ — ਮਾਤਾ-ਪਿਤਾ ਵਿੱਚ ਪਰਿਵਰਤਨ ਬੱਚਿਆਂ ਨੂੰ ਨੁਕਸਾਨ ਪਹੁੰਚਾਉਂਦੇ ਹਨ |
| ਇੱਕ ਆਮ ਕਿਸਮ ਦੁਆਰਾ ਬਹੁਰੂਪਤਾ | ਡੂੰਘੇ ਰੁੱਖ ਪਾਲਣ ਕਰਨਾ ਮੁਸ਼ਕਿਲ ਹੋ ਜਾਂਦਾ ਹੈ |
ਇੱਕ ਆਮ ਦਿਸ਼ਾ-ਨਿਰਦੇਸ਼: ਸੰਯੋਜਨ ਨੂੰ ਵਿਰਾਸਤ ਨਾਲੋਂ ਸੁਭਾਉ ਦਿਓ ਜਦੋਂ ਸਬੰਧ ਅਸਲ ਵਿੱਚ "ਕੋਲ-ਹੈ", "ਹੈ" ਨਹੀਂ।
ਵਿਰਾਸਤ ਸਭ ਤੋਂ ਵੱਧ ਗਲਤ ਵਰਤੀ ਜਾਂਦੀ OOP ਵਿਸ਼ੇਸ਼ਤਾ ਹੈ: ਇਸ ਨੂੰ ਸਿਰਫ ਕੋਡ ਸਾਂਝਾ ਕਰਨ ਲਈ ਵਰਤਨਾ ਲੁਭਾਉਣਾ ਹੈ, ਜਿਸ ਨਾਲ ਕੋਈ ਸਬੰਧ ਵਾਲੀਆਂ ਕਲਾਸਾਂ ਨੂੰ ਜੋੜ ਦਿਆ ਜਾਂਦਾ ਹੈ।
ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਵਰਤੀ ਜਾਂ — ਸਿਰਫ ਅਸਲੀ is-a ਸਬੰਧਾਂ ਲਈ — ਇਹ ਤੁਹਾਨੂੰ ਦੁਬਾਰਾ ਵਰਤਣ ਦੇ ਨਾਲ ਬਹੁਰੂਪਤਾ ਦਿੰਦੀ ਹੈ, ਜਿਸ ਨਾਲ ਤੁਸੀਂ ਸਮਾਨ ਅਨੁਰੂਪ ਤਰੀਕਿਆਂ ਨੂੰ ਉਨ੍ਹਾਂ ਦੇ ਆਮ ਪੋਤੇ ਕਲਾਸ ਦੁਆਰਾ ਸਮਰੂਪ ਰੂਪ ਵਿੱਚ ਪ੍ਰਬੰਧਿਤ ਕਰ ਸਕਦੇ ਹੋ।