Sto passando dalla programmazione procedurale C alla programmazione OOP di Python e ho affrontato alcuni problemi durante l'implementazione di alberi di ricerca binari.
Non posso rendere il mio Tree_Node nullo in caso di cancellazione. In C ho potuto fare questo perché avrei gestito il caso nella funzione come segue:
void insert(Node tree, int key)
{
if (tree == null)
{
// deal with it
}
}
Ma in Python usando OOP non posso rendere null il mio Tree_Node dato che è una classe e contiene tutti i miei metodi.
class Tree:
# Tree methods
t = Tree()
t = None # Cannot do this as then how would I call its methods
Q1) Come risolvete questo problema in generale? (non solo per gli alberi di ricerca binari) Qual è la pratica OOP standard per questo?
Il secondo problema è che non posso modificare autonomamente in Python. In C potrei fare come segue:
void foo(Node tree, int key)
{
tree = tree->left
}
Ma nella classe Python non posso fare come segue:
class Tree:
def foo(self, key):
self = self.left # Cannot do this
Q2) Quindi come risolvo tali problemi? Qualche pratica OOP standard?
Q3) Una meta domanda. Ho pensato che l'OOP faciliti la programmazione. Ma in questo caso, trovo molto difficile implementare una struttura dati piuttosto semplice. Aggiunge restrizioni come non essere in grado di modificare se stessi, non in grado di renderlo nulla ecc. Sto facendo qualcosa di sbagliato?