2010-07-09 2 views
0

У меня проблема с Python, бросающим AttributeError при доступе к переменной.Python AttributeError при использовании переменной-члена

Код приведен ниже, отредактирован для четкости.

class mycollection(object): 
    """ 
    Collection of stuff. 
    """ 
    #"compile-time" define class variables. 
    __slots__ = ["stuff_list"] 

    def __init__(self): 
     self.stuff_list = [] 

    def add_stuff(self, stuff): 
     self.stuff_list.append(stuff) 


#later on.. 
collection = mycollection() 
stuff = stuff() 
collection.add_stuff(stuff) 

Создание этой ошибки.

Traceback (most recent call last): 
    File "", line 210, in <module> 
    main() 
    File "", line 206, in main 
    thestuff = load_file(inputfile, filetype) 
    File "pyyft.py", line 121, in load_file 
    collection.add_stuff(stuff) 
    File "pyyft.py", line 55, in add_test 
    self.stuff_list.append(stuff) 
AttributeError: stuff_list 

Проверка через documentation, я не понимаю, почему эта ошибка возникновения.

+3

Где-то в вашем коде вы должны (эээ, наверное) есть строка "test_stuff". Отправьте этот код. – unutbu

+0

Исправлена ​​опечатка в '__init__' - если вы скопировали/вставляли это, вы можете исправить ее в источнике. Кроме того, по какой-либо конкретной причине вы используете '__slots__'? –

+0

@Jed - да, я избегаю автовивитации –

ответ

2

__ini__ должен быть __init__

+0

комментарий должен быть комментарий – SilentGhost

+0

Durp. Принимать входящие, когда таймер OK меня. –

+0

Я вижу, что Джед Смит редактировал вопрос, но я подозреваю, что это причина. – Oddthinking

0

Не будет ли это "более Pythonic"?

collection.stuff_list.append (test_stuff)

+0

Это не Pythonic, чтобы обдумать внутреннее состояние объектов, просто потому, что вы можете. –

+0

Я не понимаю всю идею «pythonic», но я знаю, что то, что вы предлагаете, представляет собой утечку информации между объектом и областью, в которой объект живет. Другими словами, он увеличивает связь кода между модулями , Иными словами, это нарушает парадигму ОО. Однако вы это называете, это затрудняет обслуживание и эволюцию кода. –

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