మాడ్యూల్ పాఠాలు (2/4)
వారసత్వం
వారసత్వం కొత్త తరగతిని (సబ్క్లాస్) సృష్టించడానికి మిమ్మల్ని అనుమతిస్తుంది ఇప్పటికే ఉన్న తరగతి (బేస్ క్లాస్) నుండి గుణాలు మరియు పద్ధతులను వారసత్వంగా పొందుతుంది మరియు వాటిని పొడిగించవచ్చు లేదా భర్తీ చేయవచ్చు.
ప్రాథమిక వాక్యనిర్మాణం
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():
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: టైప్ చెక్
isinstance(c, Cane) # True
isinstance(c, Animale) # True (anche la base)
isinstance(c, str) # Falseisinstance(x, BaseClass) అన్ని ఉపవర్గాలను కూడా గుర్తిస్తుంది: ఇదే
వారసత్వాన్ని పాలిమార్ఫిజంకి ఉపయోగపడేలా చేస్తుంది.
animali = [Cane("Fido", "X"), Animale("Pippo")]
for a in animali:
print(a.saluta()) # ogni oggetto risponde a suo modoMRO (మెథడ్ రిజల్యూషన్ ఆర్డర్) - అవలోకనం
మీకు బహుళ వారసత్వం ఉన్నప్పుడు, ఏ క్రమంలో చూడాలో పైథాన్ నిర్ణయిస్తుంది C3 అల్గారిథమ్తో గణించబడిన MROని అనుసరించడం ద్వారా ఒక పద్ధతి కోసం. కోసం 95% కేసులను తెలుసుకోవడం సరిపోతుంది:
- ఇది మొదటి సందర్భంలో కనిపిస్తుంది,
- అప్పుడు దాని తరగతిలో,
- తర్వాత డిక్లరేషన్ క్రమంలో బేస్ క్లాస్లలో.
Cane.__mro__
# (<class 'Cane'>, <class 'Animale'>, <class 'object'>)object అనేది పైథాన్ 3లోని ప్రతి తరగతికి మూలం.
మీ వంతు
అందించిన `క్లాస్ వెహికల్: def __init__(self, brand): self.brand = బ్రాండ్`, సూపర్().__init__ అని పిలిచే మరియు self.modelని స్టోర్ చేసే __init__(సెల్ఫ్, బ్రాండ్, మోడల్)తో `కార్(వాహనం)`ని నిర్వచించండి. `a = Car('Fiat', '500')`ని సృష్టించండి మరియు `(a.brand, a.model)`ని మూల్యాంకనం చేయండి.
సూచనను చూపించు
super().__init__(బ్రాండ్) తర్వాత self.model = మోడల్.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
`క్లాస్ షేప్: డెఫ్ ఏరియా(సెల్ఫ్): రిటర్న్ 0` మరియు `క్లాస్ స్క్వేర్(ఆకారం)`ని __init__(సెల్ఫ్, సైడ్) మరియు ఏరియా()తో సైడ్ * వైపు తిరిగి ఇవ్వండి. `q = Square(5)`ని సృష్టించండి మరియు tuple `(q.area(), isinstance(q, Shape))`ని మూల్యాంకనం చేయండి.
సూచనను చూపించు
self.side * స్వీయ.వైపు.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
అదనపు సవాలు
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 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది