J'essaie de convertir une classe de "données" creuse assez longue en un tuple nommé. Ma classe ressemble actuellement à ceci:
class Node(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
Après la conversion, namedtuple
il ressemble à ceci:
from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Mais il y a un problème ici. Ma classe d'origine m'a permis de passer juste une valeur et a pris soin de la valeur par défaut en utilisant des valeurs par défaut pour les arguments nommés / mot-clé. Quelque chose comme:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
Mais cela ne fonctionne pas dans le cas de mon tuple nommé refactorisé car il s'attend à ce que je passe tous les champs. Je peux bien sûr remplacer les occurrences de Node(val)
to Node(val, None, None)
mais ce n'est pas à mon goût.
Existe-t-il donc une bonne astuce qui peut réussir ma réécriture sans ajouter beaucoup de complexité de code (métaprogrammation) ou devrais-je simplement avaler la pilule et continuer avec la «recherche et remplacement»? :)
Node
classes actuelles et autres sont de simples objets de valeur contenant des données avec un tas de champs différents ( Node
c'est juste l'un d'entre eux). Ces déclarations de classe ne sont rien de plus que le bruit de ligne à mon humble avis et ont donc voulu les supprimer. Pourquoi entretenir quelque chose qui n'est pas nécessaire? :)
.debug_print()
méthode qui parcourt l'arbre et l'imprime?
BinaryTree
classe. Node
et d'autres détenteurs de données ne nécessitent pas de telles méthodes spéciales, étant donné que les tuples nommés ont une représentation __str__
et une __repr__
représentation décentes . :)
Node
qu'il est. Pourquoi convertir en tuple nommé?