Próbuję przekonwertować podłużną pustą klasę „data” na krotkę nazwaną. Moja klasa wygląda obecnie tak:
class Node(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
Po konwersji namedtuple
wygląda następująco:
from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Ale tutaj jest problem. Moja oryginalna klasa pozwoliła mi przekazać tylko wartość i zająłem się wartością domyślną, używając domyślnych wartości dla argumentów nazwanych / słów kluczowych. Coś jak:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
Ale to nie działa w przypadku mojego refaktoryzowanego krotki o nazwie krotka, ponieważ oczekuje, że przejdę wszystkie pola. Mogę oczywiście zastąpić wystąpienia Node(val)
do Node(val, None, None)
, ale nie jest mi do gustu.
Czy istnieje więc dobra sztuczka, która może sprawić, że moje ponowne pisanie zakończy się powodzeniem bez dodawania dużej złożoności kodu (metaprogramowanie), czy też powinienem po prostu przełknąć pigułkę i przejść do „wyszukiwania i zamiany”? :)
Node
i inne klasy są prostymi obiektami posiadającymi dane z wieloma różnymi polami ( Node
jest tylko jednym z nich). Te deklaracje klas są niczym więcej niż szumem linii, dlatego IMHO chciał je wyciąć. Po co utrzymywać coś, co nie jest wymagane? :)
.debug_print()
metody, która kroczy po drzewie i drukuje je?
BinaryTree
klasy. Node
i inni posiadacze danych nie wymagają specjalnych metod esp takie dane, które nazwane krotki mieć przyzwoity __str__
i __repr__
reprezentacji. :)
Node
klasa taka, jaka jest. Po co konwertować na nazwaną krotkę?