Saya mencoba untuk mengkonversi "data" kelas gondrong gondrong menjadi tuple bernama. Kelas saya saat ini terlihat seperti ini:
class Node(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
Setelah konversi menjadi namedtuple
seperti:
from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Tapi ada masalah di sini. Kelas asli saya memungkinkan saya untuk memberikan nilai dan menjaga standar dengan menggunakan nilai default untuk argumen nama / kata kunci. Sesuatu seperti:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
Tapi ini tidak berfungsi dalam kasus tuple bernama refactored saya karena mengharapkan saya untuk lulus semua bidang. Tentu saja saya bisa menggantikan kejadian Node(val)
untuk Node(val, None, None)
tetapi tidak sesuai dengan keinginan saya.
Jadi apakah ada trik bagus yang dapat membuat penulisan ulang saya berhasil tanpa menambahkan banyak kerumitan kode (metaprogramming) atau haruskah saya menelan pil dan melanjutkan dengan "pencarian dan ganti"? :)
Node
dan lainnya adalah objek nilai pemegang data sederhana dengan sekelompok bidang yang berbeda ( Node
hanya salah satunya). Deklarasi kelas ini tidak lebih dari garis noise IMHO karena itu ingin memangkasnya. Mengapa mempertahankan sesuatu yang tidak diperlukan? :)
.debug_print()
metode berjalan di pohon dan mencetaknya?
BinaryTree
kelas. Node
dan pemegang data lainnya tidak memerlukan metode khusus seperti itu mengingat tupel yang diberi nama memiliki representasi yang layak __str__
dan __repr__
memadai. :)
Node
kelas orisinal Anda apa adanya. Mengapa mengonversi ke nama tuple?