2013-02-23 5 views
1

Я строю конечный государственный акцептор (FSA ... в основном, дерево). У меня есть класс FSA и класс State, так как FSA должен состоять из множества States. Однако, когда сначала создается FSA, я хотел бы создать его начало State и конец State и соединить их. Вот код, который:Python Composition Cause AttributeError

class State (object): 
    __slots__ = "chars","children" 
    def __init__(self,chars,children=[]): 
     self.chars = chars 
     self.children = children 

class FSA (object): 
    __slots__ = "vocab" 
    def __init__(self,vocab): 
     self.vocab = vocab 
     self.start = State("0") 
     self.finish = State("1") 
     self.start.children.append(self.finish) 
     self.finish.children.append(self.start) 

Однако, когда я бегу fsa = FSA("vocab.small"), это бросает ошибку:

AttributeError: 'FSA' object has no attribute 'start' 

Есть ли способ, которым я могу инициировать FSA, а также создать два States для него?

ответ

4

Вы сказали:

__slots__ = "vocab" 

Что вы имеете в виду, что это значит? Если вы хотите получить атрибут начала, вам нужно включить его в свой список __slots__ или вообще не использовать __slots__. Если у вас нет проблемы с памятью, вам лучше не указывать атрибут __slots__.

+0

Получил это! Это часть большего назначения, и требуются слоты. Я не совсем понял их, но теперь я добираюсь туда. Спасибо. –

+3

«Слоты требуются»: (Когда преподаватели Java будут преподавать Python, как это должно было быть написано? –