Я намагаюся перетворити довговічний порожній клас "даних" у названий кортеж. Наразі мій клас виглядає так:
class Node(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
Після перетворення на namedtuple
нього виглядає так:
from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Але тут є проблема. Мій оригінальний клас дозволив мені передати лише значення та подбав про типові, використовуючи значення за замовчуванням для іменних / ключових слів. Щось на зразок:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
Але це не працює у випадку мого реконструйованого імені кортежу, оскільки він очікує, що я передам усі поля. Я можу, звичайно , замінити входження Node(val)
в Node(val, None, None)
але це мені не подобається.
Чи існує хороший трюк, який може зробити моє перезапис успішним без додавання великої складності коду (метапрограмування) чи мені просто проковтнути таблетку і продовжувати "пошук і заміна"? :)
Node
та інші класи - це прості об'єкти значень власника даних з купою різних полів ( Node
це лише одне з них). Ці декларації класу - це не що інше, як лінійний шум IMHO, тому він хотів їх обрізати. Навіщо підтримувати щось, що не потрібно? :)
.debug_print()
методу, який ходить по дереву і друкує його?
BinaryTree
класу. Node
та інші власники даних не вимагають таких спеціальних методів, враховуючи, що названі кортежі мають гідне __str__
та __repr__
представництво. :)
Node
клас саме таким, яким він є. Навіщо перетворюватися на названий кортеж?