2016-11-06 124 views
1

我正在爲Python類設置問題。我們正在被引入到類。我試圖(A)用單個參數string創建一個名爲Sentence的類,並創建一個將該句子存儲爲字符串的實例變量。 (B)然後爲該類指定訪問器方法:getSentence(將該句子作爲字符串返回),getWords(返回句中的單詞列表),getLength(返回句子中的字符數),getNumWords(返回句子中的單詞數量)。以下是我迄今所嘗試的:Python類,實例變量和訪問器方法

line = "This Tuesday is Election Day" 

class Sentence: 
    def __init__(self, text, string, words, length, num): 
     self.text = sentence 
     self.string = str(self.text) 
     self.words = self.text.split() 
     self.length = len(self.text) 
     self.num = len(self.words) 

    def getSentence(self): 
     return self.string 

    def getWords(self): 
     return self.words 

    def getLength(self): 
     return self.length 

    def getNumWords(self): 
     return self.num 



line.getWords() 

謝謝你的時間。

下面是更新的代碼工作:

class Sentence: 
    def __init__(self, string): 
     self.astring = str(string) 

    def getSentence(self): 
     return self.astring 

    def getWords(self): 
     return (self.astring).split() 

    def getLength(self): 
     return len(self.astring) 

    def getNumWords(self): 
     return len(self.getWords()) 



string = Sentence("The Election is tomorrow") 

print (string.getSentence()) 
print (string.getWords()) 
print (string.getLength()) 
print (string.getNumWords()) 
+0

它工作?問題是什麼? – tdelaney

+0

它不起作用,我想象它。我在上面創建了一個示例字符串,「This Tuesday ...」以及當我輸入'line'時。getSentence()'我收到'AttributeError:'str'對象沒有屬性'getSentence'「 – Babeeshka

+1

這是你的第一個問題。您想要將該字符串傳遞給該類以進行進一步處理。一個簡單的測試就是'foo =句子(行)'。這會失敗,因爲'Sentence .__ init__'需要一堆變量。但是'string,words,length,num'是由類來計算的,所以你不應該把它們傳遞給初始值設定項。所以把它們拿出來。然後你會遇到下一個問題....這就是所謂的「測試驅動開發」。編寫破解測試,修復問題,編寫更多測試。 – tdelaney

回答

1

認爲編程是一種捶打鼴鼠遊戲。你必須不斷衝擊這些錯誤。甚至在編寫程序之前,您可以編寫一系列測試,以表明類應該如何運行。有這樣做的各種框架,包括unittestnose,但最簡單的事情是一系列的assert陳述。如果表達式不正確,他們所做的只是引發異常。

因此,讓buitd一些測試

class Sentence: 
    def __init__(self, text, string, words, length, num): 
     self.text = sentence 
     self.string = str(self.text) 
     self.words = self.text.split() 
     self.length = len(self.text) 
     self.num = len(self.words) 

    def getSentence(self): 
     return self.string 

    def getWords(self): 
     return self.words 

    def getLength(self): 
     return self.length 

    def getNumWords(self): 
     return self.num 

line = "This Tuesday is Election Day" 
assert Sentence(line), "can initialize" 
assert Sentence(line).getSentence() == line, "can return sentence" 
assert Sentence(line).getWords() == ['This', 'Tuesday', 'is', 
    'Election', 'Day'], "can return words" 
# etc... 

我運行它,我得到

Traceback (most recent call last): 
    File "v.py", line 22, in <module> 
    assert Sentence(line), "can initialize" 
TypeError: __init__() missing 4 required positional arguments: 'string', 'words', 'length', and 'num' 

哎呀,這些參數是完全不必要的,所以我刪除它們,然後再次運行,我也得到

Traceback (most recent call last): 
    File "v.py", line 22, in <module> 
    assert Sentence(line), "can initialize" 
    File "v.py", line 3, in __init__ 
    self.text = sentence 
NameError: name 'sentence' is not defined 

哎呀,參數名稱不正確...繼續這樣做,直到它的一切工作。

1

好,有幾件事會在這裏你似乎有誤解。

讓我們先從簡單:

當你做line.getWords(),試圖調用該對象linegetWords方法。您似乎認爲lineSentence類型的對象,但事實並非如此。相反,line只是string類型的對象,因爲這是您在腳本的第一行中分配給它的對象。

相反,你需要這樣的對象類型Sentence的實例:

sentence = Sentence(line) 

然後,你可以調用你的類的實例定義的方法:

sentence.getWords() 

如前所述在其中一個評論中,你的班級的界面也存在問題。如果您遇到問題,請嘗試自行解決問題或報告問題。自己解決這些問題是您想要開發的技能的一部分。