Tôi đang cố gắng chuyển đổi một lớp "dữ liệu" rỗng dài thành một tuple có tên. Lớp của tôi hiện tại trông như thế này:
class Node(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
Sau khi chuyển đổi, namedtuple
nó trông giống như:
from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Nhưng có một vấn đề ở đây. Lớp ban đầu của tôi cho phép tôi chuyển vào chỉ một giá trị và chăm sóc mặc định bằng cách sử dụng các giá trị mặc định cho các đối số từ khóa / tên. Cái gì đó như:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
Nhưng điều này không hoạt động trong trường hợp bộ tái cấu trúc của tôi có tên là tuple vì nó hy vọng tôi sẽ vượt qua tất cả các lĩnh vực. Tôi tất nhiên có thể thay thế các lần xuất hiện của Node(val)
để Node(val, None, None)
nhưng nó không phải là theo ý thích của tôi.
Vì vậy, có tồn tại một mẹo hay có thể giúp tôi viết lại thành công mà không cần thêm nhiều phức tạp mã (siêu lập trình) hay tôi chỉ nên nuốt viên thuốc và tiếp tục với "tìm kiếm và thay thế"? :)
Node
các lớp hiện tại và các lớp khác là các đối tượng giá trị giữ dữ liệu đơn giản với một loạt các trường khác nhau ( Node
chỉ là một trong số chúng). Các khai báo lớp này không có gì nhiều ngoài nhiễu dòng IMHO do đó muốn cắt bỏ chúng. Tại sao phải duy trì một cái gì đó không cần thiết? :)
.debug_print()
phương pháp đi trên cây và in nó?
BinaryTree
lớp học. Node
và các chủ sở hữu dữ liệu khác không yêu cầu các phương thức đặc biệt như vậy, đặc biệt là các bộ dữ liệu được đặt tên có một đại diện __str__
và phong nha __repr__
. :)
Node
lớp học ban đầu của bạn . Tại sao chuyển đổi sang tuple được đặt tên?