在__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