SORU
5 Temmuz 2012, PERŞEMBE


Başlık ve isteğe bağlı adında anahtar kelime argümanlar

Uzunca bir "veri" adlı bir başlığın içine sınıf. içi boş dönüştürmek için çalışıyorum Dersim şu anda bu gibi görünüyor:

class Node(object):
    def __init__(self, val, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

namedtuple dönüşüm sonra gibi görünüyor:

from collections import namedtuple
Node = namedtuple('Node', 'val left right')

Ama burada bir sorun var. Orijinal sınıf arkadaşlarım beni sadece bir değer geçirmek izin ve adlı/anahtar kelime argümanlar için varsayılan değerleri kullanarak varsayılan baktı. Gibi bir şey

class BinaryTree(object):
    def __init__(self, val):
        self.root = Node(val)

Ama bu beni tüm alanları geçmesini umuyor sonra refactored adında benim demet halinde çalışmıyor. Node(val, None, None) *tabii ki 8* olaylar yerini dolduramam ama benim sevme için değil.

Çok mu var iyi bir oyun olabilir benim yeniden yazma başarılı olmadan ekleme bir sürü kod karmaşıklığı (metaprogramming) ya gerekir ben sadece yut hapı ve devam "arama ve değiştirme"? :)

TİA
-- sauke

CEVAP
23 Mayıs 2013, PERŞEMBE


Namedtuple ben alt ve __new__ yöntemi bozdu:

from collections import namedtuple

class Node(namedtuple('Node', ['value', 'left', 'right'])):
    def __new__(cls, value, left=None, right=None):
        return super(Node, cls).__new__(cls, value, left, right)

Bu fabrika bir işlevi bir sınıf kılığında yaratılması değil, sezgisel tip bir hiyerarşi korur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • JTechTalk

    JTechTalk

    11 Temmuz 2010
  • Justin Schenck

    Justin Schen

    24 Kasım 2006
  • Kai Moosmann

    Kai Moosmann

    5 Temmuz 2006