2013-02-14 58 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