2016-04-01 4 views
0

Ich versuche, eine Yaml-Datei zu analysieren, die kaskadierte Datenstrukturen enthält. WieKaskadenliste von Klassenobjekten in Python 2.7

- Building 
    Address 
    Zip 
    Room 
    -- Employee1 
    -- Employee2 

usw.

Ich versuche, in einer Liste von Klassenobjekten zu speichern, dass. Ich habe das Problem zu folgenden Code reduziert:

qstuff.py

class bstuff(): 
    def __init__(self): 
     self.b_name = "" 
     self.b_port = "" 

class astuff(): 
    def __init__(self): 
     self.a_name = "" 
     self.a_port = "" 
     self.a_st = [bstuff] 

worker.py

from qstuff import astuff 
from qstuff import bstuff 

my_stuff = [astuff] 

more_stuff = [bstuff] 

more_stuff.append(bstuff) 
more_stuff.append(bstuff) 

my_stuff[0].a_st.append(bstuff) 

das gibt mir folgende Fehlermeldung:

$ python worker.py 
Traceback (most recent call last): 
    File "worker.py", line 11, in <module> 
    my_stuff[0].a_st.append(bstuff) 
AttributeError: class astuff has no attribute 'a_st' 

ich für ziemlich gesucht haben eine Weile zu dem Thema, konnte aber kein un finden zuverlässige Antwort, warum dies nicht funktioniert oder wie ich kaskadierte Daten in einer Liste speichern müsste.

+0

a_st wäre ein Mitglied, Sie greifen statisch darauf zu – Schore

Antwort

1

Sie haben keine Instanzen erstellt, Sie haben nur Verweise auf die Klassen erstellt.

Sie müssen Anruf eine Klasse eine Instanz der Klasse zu erstellen:

self.a_st = [bstuff()] 

und

my_stuff = [astuff()] 
more_stuff = [bstuff()] 

Ihre astuff Klasse hat keine a_st Attribut; Dieses Attribut wird nur für Instanzen in der Methode astuff.__init__ festgelegt (die automatisch aufgerufen wird, wenn eine neue Instanz erstellt wird).

Ich würde dies nicht direkt auf Klassen tun (also nicht a_st = [bstuff] in den Klassenkörper einfügen), außer Sie möchten wirklich eine Hierarchie von veränderbaren Singleton-Klassen erstellen, für die Sie keine Instanzen erstellen.