2013-03-04 14 views
19

Argwar argümanında kwargs işlevi nasıl iletilir?

class M(object): 
    def __init__(self, **kwargs): 
     ...do_something 

aşağıdaki gibi bir sınıf tanımladık ve örneğin argparse.parse_args() sonucu vardır:

I ( message_type hariç) bu ad değerlerine geçmek istediğiniz
> args = parse_args() 
> print args 
Namespace(value=5, message='test', message_type='email', extra="blah", param="whatever") 

oluşturmak M sınıfının bir örneği. Ben

M(args) 

çalıştı ama anlamıyorum bir hata

TypeError: __init__() takes exactly 1 argument (2 given) 

var. Ben doğrudan M(value=5, message='test', extra="blah", param="whatever") yazarsınız gibi nasıl

  1. değerlere args
  2. geçişte listeden değerini message_type kaldırabilirsiniz.

cevap

31

yerine vars(args) sonucu geçmesi gerekiyor: Ad alanı örneğinin

M(**vars(args)) 

vars() function döner ad (onun __dict__ özellik) bir sözlük olarak.

M.__init__() içinde, sadece message_type anahtarını görmezden.

+1

Thats tam olarak neye ihtiyacım. Teşekkürler. Belirli bir tuşun kaldırılması hariç. Kaldırılmasına ihtiyacım var, bu sorunun kapsamı dışındaki nedenlerden ötürü görmezden gelemem. – Alex

+2

Ben 'vars' ile mümkün tanımsız davranıştan kaçınmak için' (vars (args k (k, v) v) .items() k eğer! = "Message_type") 'arg_dict = dicti yapmanız. – Alex

+0

@Alex: vars' ile hangi tanımsız davranış? Sen vars() '(öyle değil ki) tanımsız davranış olabilir değil' çünkü, tabii, 'message_type' anahtar bu şekilde süzmek, ancak kendi iyiliği için bunu yapabilir. –

İlgili konular