தொகுதி பாடங்கள் (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!'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 (முறை தீர்மானம் ஒழுங்கு) - கண்ணோட்டம்
உங்களிடம் பல மரபுரிமைகள் இருக்கும்போது, எந்த வரிசையில் பார்க்க வேண்டும் என்பதை பைதான் தீர்மானிக்கிறது MRO ஐப் பின்பற்றி ஒரு முறைக்கு, C3 அல்காரிதம் மூலம் கணக்கிடப்படுகிறது. க்கு 95% வழக்குகள் தெரிந்து கொள்ள போதுமானது:
- இது நிகழ்வில் முதலில் தெரிகிறது,
- பின்னர் அதன் வகுப்பில்,
- பின்னர் அறிவிப்பு வரிசையில் அடிப்படை வகுப்புகளில்.
Cane.__mro__
# (<class 'Cane'>, <class 'Animale'>, <class 'object'>)object என்பது பைதான் 3 இல் உள்ள ஒவ்வொரு வகுப்பின் மூலமும் ஆகும்.
உங்கள் முறை
கொடுக்கப்பட்ட `வகுப்பு வாகனம்: def __init__(self, brand): self.brand = brand`, __init__(self, brand, model) உடன் `Car(Vehicle)` என்பதை வரையறுத்து அது super().__init__ என்று அழைக்கிறது மற்றும் self.model ஐ சேமிக்கிறது. `a = Car('Fiat', '500')` ஐ உருவாக்கி, `(a.brand, a.model)` என்பதை மதிப்பிடவும்.
குறிப்பைக் காட்டு
super().__init__(brand) பிறகு self.model = மாதிரி.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
`வகுப்பு வடிவம்: டெஃப் பகுதி(சுய): __init__(செல்ஃப், சைட்) உடன் 0` மற்றும் `கிளாஸ் ஸ்கொயர்(வடிவம்)` மற்றும் பக்க * பக்கத்தை வழங்கும் பகுதி() ஆகியவற்றை வரையறுக்கவும். `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 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்