2013-02-23 33 views
1

我正在構建一個有限狀態接受器(FSA ...基本上是一棵樹)。我有一個FSA類和State類,因爲FSA應該由許多States組成。但是,當初始創建FSA時,我想創建其開始State並結束State,並將它們連接起來。下面是該代碼:Python構成原因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

Got it!這是更大的任務的一部分,並且插槽是必需的。我沒有完全理解他們,但現在我到了那裏。謝謝。 – 2013-02-23 00:07:49

+3

「插槽是必需的」:(Java教授什麼時候教Python,因爲它是爲了寫作? – 2013-02-23 00:08:40