Uzun bir içi boş "veri" sınıfı adlı bir tuple dönüştürmek çalışıyorum. Sınıfım şu anda şöyle görünüyor:
class Node(object):
def __init__(self, val, left=None, right=None):
self.val = val
self.left = left
self.right = right
Dönüşümden sonra namedtuple
şöyle görünür:
from collections import namedtuple
Node = namedtuple('Node', 'val left right')
Ama burada bir sorun var. Orijinal sınıfım yalnızca bir değer iletmeme izin verdi ve adlandırılmış / anahtar kelime bağımsız değişkenleri için varsayılan değerleri kullanarak varsayılan değerle ilgileniyordu. Gibi bir şey:
class BinaryTree(object):
def __init__(self, val):
self.root = Node(val)
Ancak bu, benim tüm alanları geçmemi beklediğinden, yeniden adlandırılmış tuple'ım durumunda işe yaramıyor. Ben tabii tekrarlarını yerini alabilecek Node(val)
kadar Node(val, None, None)
ama benim zevk için değil.
Peki, çok fazla kod karmaşıklığı (metaprogramlama) eklemeden yeniden yazmamı başarılı kılabilecek iyi bir hile var mı, yoksa sadece hapı yutmalı ve "ara ve değiştir" ile devam etmeli miyim? :)
Node
ve diğer sınıflar bir grup farklı alanlarla basit veri tutucu değer nesneleri Node
(bunlardan sadece biri). Bu sınıf bildirimleri IMHO'nun hat gürültüsünden başka bir şey değildir. Neden gerekli olmayan bir şeyi sürdürmelisiniz? :)
.debug_print()
ağacı yürüyen ve basan bir yönteminiz yok mu?
BinaryTree
sınıf için. Node
ve diğer veri sahipleri, adlandırılmış tuples'lerin iyi __str__
ve __repr__
temsili olduğu göz önüne alındığında, bu tür özel yöntemler gerektirmez . :)
Node
sınıfınızı olduğu gibi seviyorum . Neden adlandırılmış tuple dönüştürülmeli?