2016-04-01 22 views
0

Basamaklı veri yapılarını içeren bir yaml dosyasını ayrıştırmaya çalışıyorum.python sınıf nesnelerinin çağlayan listesi 2.7

- Building 
    Address 
    Zip 
    Room 
    -- Employee1 
    -- Employee2 

vb

gibi ben sınıf nesnelerinin bir listeden söz konusu depolamak çalışıyorum. Aşağıdaki kodu sorunu azalttık:

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) 

bu bana aşağıdaki hata veriyor:

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

Oldukça aramalara konuyla ilgili bir süre ama bulamadı Bunun neden işe yaramadığını ya da basamaklı verileri bir listede nasıl saklayacağımı açıklayabilirim.

+0

a_st üye olur, statik erişiyorsunuz – Schore

cevap

1

örneklerini oluşturmadınız, yalnızca sınıflara başvurular oluşturdunuz.

O sınıfının bir örneğini oluşturmak için çağrısı bir sınıf gerekir:

self.a_st = [bstuff()] 

ve

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

Sizin astuff sınıfı hiçbir a_st özniteliği; Bu özellik yalnızca astuff.__init__ yöntemindeki (yeni bir örnek oluşturulduğunda otomatik olarak çağrılan) örnekler için ayarlanır.

Örnekler oluşturmayacağınız değişken bir tekil sınıfları hiyerarşisi oluşturmak istemiyorsanız, bunu doğrudan sınıflar üzerinde yapmam (bu nedenle sınıf gövdesine a_st = [bstuff] eklemeyin).