在__init__中调用类函数

我正在写一些代码,需要一个文件名,打开文件,并parsing出一些数据。 我想在课堂上做这个。 以下代码工作:

class MyClass(): def __init__(self, filename): self.filename = filename self.stat1 = None self.stat2 = None self.stat3 = None self.stat4 = None self.stat5 = None def parse_file(): #do some parsing self.stat1 = result_from_parse1 self.stat2 = result_from_parse2 self.stat3 = result_from_parse3 self.stat4 = result_from_parse4 self.stat5 = result_from_parse5 parse_file() 

但是它涉及到把所有的parsing机制放在我的类的__init__函数的范围内。 现在这个简化的代码看起来很好,但是函数parse_file也有相当多的缩进级别。 我宁愿将函数parse_file()定义为类函数,如下所示:

 class MyClass(): def __init__(self, filename): self.filename = filename self.stat1 = None self.stat2 = None self.stat3 = None self.stat4 = None self.stat5 = None parse_file() def parse_file(): #do some parsing self.stat1 = result_from_parse1 self.stat2 = result_from_parse2 self.stat3 = result_from_parse3 self.stat4 = result_from_parse4 self.stat5 = result_from_parse5 

当然这个代码不起作用,因为函数parse_file()不在__init__函数的范围之内。 有没有办法从该类的__init__中调用类函数? 还是我想这是错误的方式?

以这种方式调用函数:

 self.parse_file() 

你还需要像这样定义你的parse_file()函数:

 def parse_file(self): 

parse_file方法在被调用时必须被绑定到一个对象(因为它不是一个静态方法)。 这是通过调用对象实例上的函数完成的,在这种情况下,实例是self

如果我没有错,两个函数都是你的类的一部分,你应该像这样使用它:

 class MyClass(): def __init__(self, filename): self.filename = filename self.stat1 = None self.stat2 = None self.stat3 = None self.stat4 = None self.stat5 = None self.parse_file() def parse_file(self): #do some parsing self.stat1 = result_from_parse1 self.stat2 = result_from_parse2 self.stat3 = result_from_parse3 self.stat4 = result_from_parse4 self.stat5 = result_from_parse5 

replace你的线路:

 parse_file() 

有:

 self.parse_file() 

怎么样:

 class MyClass(object): def __init__(self, filename): self.filename = filename self.stats = parse_file(filename) def parse_file(filename): #do some parsing return results_from_parse 

顺便说一下,如果你有名为stat1stat2等variables,情况是乞求一个元组: stats = (...)

所以让parse_file返回一个元组,并将这个元组存储在self.stats

然后,例如,你可以用self.stats[2]访问曾经被称为stat3self.stats[2]

parse_file ,使用self参数(就像在__init__ )。 如果还有其他需要的上下文,那么就像往常一样传递它作为附加参数。

你必须像这样声明parse_file; def parse_file(self) 。 “自我”参数是大多数语言的隐藏参数,但不是在Python中。 您必须将其添加到属于某个类的所有方法的定义中。 然后你可以使用self.parse_file从类中的任何方法调用函数

你的最终节目将如下所示:

 class MyClass(): def __init__(self, filename): self.filename = filename self.stat1 = None self.stat2 = None self.stat3 = None self.stat4 = None self.stat5 = None self.parse_file() def parse_file(self): #do some parsing self.stat1 = result_from_parse1 self.stat2 = result_from_parse2 self.stat3 = result_from_parse3 self.stat4 = result_from_parse4 self.stat5 = result_from_parse5 

我认为你的问题实际上是没有正确缩进init函数。它应该是这样的

 class MyClass(): def __init__(self, filename): pass def parse_file(): pass