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 namedtupleseperti:
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"? :)
Nodedan lainnya adalah objek nilai pemegang data sederhana dengan sekelompok bidang yang berbeda ( Nodehanya 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?
BinaryTreekelas. Nodedan pemegang data lainnya tidak memerlukan metode khusus seperti itu mengingat tupel yang diberi nama memiliki representasi yang layak __str__dan __repr__memadai. :)
Nodekelas orisinal Anda apa adanya. Mengapa mengonversi ke nama tuple?