আমি দীর্ঘতর ফাঁকা "ডেটা" শ্রেণিকে নামকরণিত টিপলে রূপান্তর করার চেষ্টা করছি। আমার ক্লাসটি বর্তমানে এর মতো দেখাচ্ছে:
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কেবলমাত্র এটির মধ্যে একটি )। এই শ্রেণীর ঘোষণাগুলি আইএমএইচও লাইন শোরগোলের চেয়ে বেশি কিছুই নয় তাই এগুলি ছাঁটাই করতে চেয়েছিল। প্রয়োজনীয় কিছু না কেন এমন রক্ষণাবেক্ষণ করবেন? :)
.debug_print()পদ্ধতি নেই যা গাছটি হাঁটে এবং মুদ্রণ করে?
BinaryTreeক্লাসের জন্য। Nodeএবং অন্যান্য ডেটা হোল্ডারদের যেমন বিশেষ পদ্ধতিগুলির প্রয়োজন হয় না যেমন দেওয়া tuples একটি শালীন __str__এবং __repr__প্রতিনিধিত্ব আছে given :)
Nodeক্লাসটি ঠিক তেমন পছন্দ করি। নামকরণ tuple রূপান্তর কেন?