ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 7 · 4లో పాఠం 2కోర్సులో 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ని తిరిగి వ్రాయకుండానే Animale నుండి __init__ని పొందుతుంది.

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 (మెథడ్ రిజల్యూషన్ ఆర్డర్) - అవలోకనం

మీకు బహుళ వారసత్వం ఉన్నప్పుడు, ఏ క్రమంలో చూడాలో పైథాన్ నిర్ణయిస్తుంది C3 అల్గారిథమ్‌తో గణించబడిన MROని అనుసరించడం ద్వారా ఒక పద్ధతి కోసం. కోసం 95% కేసులను తెలుసుకోవడం సరిపోతుంది:

  1. ఇది మొదటి సందర్భంలో కనిపిస్తుంది,
  2. అప్పుడు దాని తరగతిలో,
  3. తర్వాత డిక్లరేషన్ క్రమంలో బేస్ క్లాస్‌లలో.
Python
Cane.__mro__
# (<class 'Cane'>, <class 'Animale'>, <class 'object'>)

object అనేది పైథాన్ 3లోని ప్రతి తరగతికి మూలం.

మీ వంతు

వ్యాయామం#python.m7.l2.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

అందించిన `క్లాస్ వెహికల్: def __init__(self, brand): self.brand = బ్రాండ్`, సూపర్().__init__ అని పిలిచే మరియు self.modelని స్టోర్ చేసే __init__(సెల్ఫ్, బ్రాండ్, మోడల్)తో `కార్(వాహనం)`ని నిర్వచించండి. `a = Car('Fiat', '500')`ని సృష్టించండి మరియు `(a.brand, a.model)`ని మూల్యాంకనం చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

super().__init__(బ్రాండ్) తర్వాత self.model = మోడల్.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#python.m7.l2.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

`క్లాస్ షేప్: డెఫ్ ఏరియా(సెల్ఫ్): రిటర్న్ 0` మరియు `క్లాస్ స్క్వేర్(ఆకారం)`ని __init__(సెల్ఫ్, సైడ్) మరియు ఏరియా()తో సైడ్ * వైపు తిరిగి ఇవ్వండి. `q = Square(5)`ని సృష్టించండి మరియు tuple `(q.area(), isinstance(q, Shape))`ని మూల్యాంకనం చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

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 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది