2013-02-14 40 views
1

我剛剛學習python,而且似乎在犯一個微不足道的錯誤。有了這段代碼,使用構造函數的模式獲取和錯誤。初學者的python類的構造函數不需要argumens

「cit_ref =模式(patstring,3) 類型錯誤:這個構造函數沒有參數」

import re 

class Patterns: 
    """A simple struct to hold our regex """ 
def __init__(self, pat, bodynumArg=2): 
    self.pat = pat 
    self.bodynum = bodynumArg 
    self.reg = re.compile(self.pat, re.M+re.S) 

patstring = r'<((us-)?references-cited)>(.*?)</\1>' 
cit_ref = Patterns(patstring, 3) 
+2

這是您的實際縮進嗎? '__init__'沒有縮進到正確的級別。 – mVChr 2013-02-14 01:38:54

+0

禁止縮進問題,我看不到任何錯誤。你可以發佈完整的追溯? – mgilson 2013-02-14 01:39:59

+1

是的,那是真正的代碼。我沒有意識到__init__預計會縮進。仍然習慣於使用縮進而不是{} 謝謝 – fishtoprecords 2013-02-14 01:46:12

回答

5

你只需要縮進__init__功能,使其class Patterns下。就像這樣:

import re 

class Patterns: 
    """A simple struct to hold our regex """ 
    def __init__(self, pat, bodynumArg=2): 
     self.pat = pat 
     self.bodynum = bodynumArg 
     self.reg = re.compile(self.pat, re.M+re.S) 

patstring = r'<((us-)?references-cited)>(.*?)</\1>' 
cit_ref = Patterns(patstring, 3) 

在Python中,縮進做基本上是括號/括號做其他語言 - 他們劃定的代碼,所以你必須要小心你的縮進同樣的事情。

+2

難怪它看起來是正確的 - 我只是認爲OP有很多人都會遇到SO標記問題。有趣的是,沒有文檔字符串的類會使錯誤更加明顯。 – mgilson 2013-02-14 01:42:15

+0

@mgilson是的,我開始編輯,但後來意識到'init'塊之前和之後的東西是用markdown正確縮進的。 – 2013-02-14 01:43:48

+2

我想這就是爲什麼周圍有這麼多人堅持「從不編輯代碼的問題」的立場:) – mgilson 2013-02-14 01:44:46