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
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.
Clojure anahtar kelime argümanlar...
Python normal tartışmalar vs. anahtar ...
Değişken uzunlukta konumsal tartıştıkt...
Python bir işlevi alır anahtar kelime ...
Her zaman anahtar kelime argümanlar ku...