Concetti Chiave
- Gli attributi privati in Python iniziano con doppio underscore (__) e sono accessibili solo all'interno della classe di definizione, non visibili nelle sottoclassi.
- Gli attributi protetti, preceduti da un singolo underscore (_), sono accessibili all'interno della classe e delle sue sottoclassi, segnalandone il ruolo ma non limitandone l'accesso.
- La terminologia delle sottoclassi in Python include termini come "superclasse" e "classe base", con possibilità di ridefinire metodi ereditati tramite override.
- Il metodo super() in Python consente di accedere ai metodi e attributi della superclasse dell'oggetto corrente, permettendo di estendere o modificare comportamenti ereditati.
- In Python, i metodi dinamici includono meccanismi di lookup e dispatch, che gestiscono la risoluzione e l'invocazione dei metodi a runtime.
Python – sottoclassi e attributi
Attributi privati
Attributi private: iniziano con __, non finiscono con __, cioè --nome
Sono privati alla classe di definizione, non è visibile fuori dalla classe e neppure nelle sottoclassi
Attributi protetti
Attributi protetti: di fatto si comportano come attributi e metodi pubblici ma vengono usati per chiarire il ruolo di alcuni nomi definiti nella classe
Attributi e metodi protetti possono essere modificati all'interno della classe | o delle sottoclassi | che li definiscono.
Per definire ed accedere ad attributi e metodi protetti anteponiamo un singolo underscore (_) al loro nome.
Sottoclassi – ereditarietà
Ogni operazione della superclasse ha senso anche sulla sottoclasse
Class point:
Class movpoint(point):
Terminologia equivalente:
Movpoint è sottoclasse di point
Point è la superclasse (immediata) di point
Anche: movpoint è basata su point, è derivata da point
Point è la classe base di movpoint
Instanceof(object,class)
Quando si eredita un metodo, si può ridefinirlo (override)
Metodo super():super() restituisce l'oggetto (l'istanza) dove è chiamato, ma vista nella sua superclasse. È un "self" spostato nella sua superclasse
Class point:
def __init__(self,xx,yy):
self.x=xx
self.y=yy
Class colpoint(point):
def __init__(self,xx,yy,col):
super().__init__(xx,yy)
self.c=col
Dynamic method:
- lookup
- dispatch