Я намагаюся перетворити довговічний порожній клас "даних" у названий кортеж. Наразі мій клас виглядає так:
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клас саме таким, яким він є. Навіщо перетворюватися на названий кортеж?