2016-04-01 3 views
0

Я пытаюсь разобрать файл yaml, который содержит каскадные структуры данных. Каккаскадный список объектов класса в python 2.7

- Building 
    Address 
    Zip 
    Room 
    -- Employee1 
    -- Employee2 

т.д.

Я пытаюсь сохранить, что в списке объектов класса. Я свел задачу к следующему коду:

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) 

это дает мне следующую ошибку:

$ 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' 

Я искал довольно в то время как по теме, но не мог найти un что это не работает или как мне нужно хранить каскадные данные в списке.

+0

a_st будет членом, вы получаете к нему статический – Schore

ответ

1

Вы не создали экземпляров, вы только создали ссылки на классы.

Вы должны вызова класс, чтобы создать экземпляр этого класса:

self.a_st = [bstuff()] 

и

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

astuff Ваш класс не имеет a_st атрибута; этот атрибут устанавливается только для экземпляров в методе astuff.__init__ (который автоматически вызывается при создании нового экземпляра).

Я бы не делал этого непосредственно в классах (поэтому не добавляйте a_st = [bstuff] в тело класса), если вы действительно не хотите создавать иерархию изменяемых одноэлементных классов, для которых вы не создаете экземпляры.

Смежные вопросы