在__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 
 顺便说一下,如果你有名为stat1 , stat2等variables,情况是乞求一个元组: stats = (...) 。 
 所以让parse_file返回一个元组,并将这个元组存储在self.stats 。 
 然后,例如,你可以用self.stats[2]访问曾经被称为stat3的self.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