मैं एक लंबे खोखले "डेटा" वर्ग को नामांकित टुपल में बदलने की कोशिश कर रहा हूं। मेरी कक्षा वर्तमान में इस तरह दिखती है:
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कक्षा को वैसे ही पसंद करता हूं जैसे वह है। क्यों नामांकित करने के लिए परिवर्तित करें?