2016-12-09 1 views
0

Ich versuche, ein leeres Objekt zu erstellen, die wie folgt verschachtelte Attribute enthält:ein leeres Objekt mit verschachtelten Attributen in Python erstellen

form = type('',(), {})() 
form.foo.data = '' 

aber ich erhalte folgende Attribut Fehler:

>>> form = type('',(), {})() 
>>> form.foo.data = '' 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
AttributeError: 'str' object has no attribute 'data' 

Wie Soll ich das Objekt konstruieren, um das zu erreichen?

+0

wie wollen Sie diese nutzen? – Navidad20

+0

Nun, der Klassenkonstruktor wäre die 'Form' Klasse aus' WTForms'. Aber in diesem Fall möchte ich nur ein "falsches" Objekt erstellen, das nur diese Attribute enthält: 'form.foo.data' oder' form.bar.data' und so weiter. – ericMTR

+0

@ Navidad20 Es ist für einen Testfall. Ich muss die Werte diesen Attributen manuell zuweisen. – ericMTR

Antwort

1

Gemäß der Typ-Funktion sollte das dritte Argument in Form eines Wörterbuchs vorliegen. Für verschachtelte Attribute können Sie das Objekt also vor sich selbst erstellen und dann im Wörterbuch verwenden. So etwas wie dies funktionieren könnte -

da = type('',(),{'data':1})  
a = type('',(),{'foo':da}) 
+0

Es funktioniert perfekt. Vielen Dank – ericMTR

0

ich nicht Ihren Punkt, aber Sie können namedtuple verwenden:

>>>from collections import namedtuple 

>>>foo = namedtuple('foo', "data tuple dict") 
>>>foo.data = "" 
'' 
>>> foo.tuple =() 
>>> foo.tuple 
() 
Verwandte Themen