我已经用 Python 编写了一个算法,现在我正试图让它更加面向对象。我对对象和类有很好的理解(我认为),并且我花了一些时间在线阅读 Python 中类的语法。但是,我想我的问题很基本,如果能得到一些帮助会很棒。
我创建了一个包含 3 个定义的类 XML。我也曾经用来__init__
初始化对象。
class XML():
def __init__(self,f):
self.f = f
def xmlToString(self):
data = self.f.read()
self.f.close()
...
return station_arr
def exportArray(self):
f= open('stations/'+self.STATION+'.txt')
lines= f.readlines()
...
return phenomena,parameters
def calcAvg(self):
split_phenom = self.phenomena.split(';')
list_of_lists = []
for e in self.parameters:
...
return phenomena,parameters
然后,在 main.py 中实例化对象并调用我想要的方法,如下所示:
stations_names ['one', 'two'...]
for station in stations_names:
f = open('respond.txt','r')
xmlStr = ClassXML.XML(f)
stations_arr = xmlStr.xmlToString()
xmlRead = ClassXML.XML(stations_arr)
phenomena,parameters = xmlRead.exportArray()
xmlRetr = ClassXML.XML(phenomena,parameters)
avg_dict,dict_values = xmlRetr.calcAvg()
我得到的错误是这样的:
f= open('stations/'+self.station+'.txt')
AttributeError: XML instance has no attribute 'station'
所以我明白是什么问题。我必须如何将变量“station”传递给类。但是当我尝试将它包含在init函数中时,我得到了不同的错误:
xmlStr = ClassXML.XML(f)
TypeError: __init__() takes exactly 3 arguments (2 given)
然后我想也许我必须有多个初始化函数,但据我所知,这在 Python 中是不可能的。老实说,我真的不知道如何处理这个问题。任何提示都会很有用。
感谢:D
Ps 我不确定标题是否正确解释了我的问题,但我找不到任何正确的词来表达它!
实施的最终答案
class XML():
def __init__(self,f,station):
self.f = f
self.station =station
def xmlToString(self):
data = self.f.read()
self.f.close()
...
return station_arr
def exportArray(self):
f= open('stations/'+self.STATION+'.txt')
lines= f.readlines()
...
return phenomena,parameters
def calcAvg(self,phenomena,parameters):
split_phenom = self.phenomena.split(';')
list_of_lists = []
for e in self.parameters:
...
return avg_dict,dict_values
** 主要的 **:
for station in stations_names:
f = open('respond.txt','r')
## Instantiate class: ClassXmlString
xmlStr = ClassXML.XML(f,station)
stations_arr = xmlStr.xmlToString()
if stations_arr !='':
phenomena,parameters = xmlStr.exportArray()
avg_dict,dict_values = xmlStr.calcAvg(phenomena,parameters)