我正在学习OOP(通常用于函数式编程)。这个小脚本在这里运行,但我不确定如何永久保存对象中的数据值(在这种情况下,对象的实例名为count,我试图将self.count存储到实例中)。 / p>
#! /usr/bin/python3
class WordCounter:
def __init__(self, count = 0):
self.__count = count
def set_count(self, path):
try:
nfile = open(path, "r")
except:
print("Could not open file")
fileList = []
lowerCaseList = []
line = nfile.read()
fileList.append(line.split())
nfile.close
lowerCaseList = [word.lower() for word in fileList[0]]
print(lowerCaseList)
self.count = len(lowerCaseList)
def get_word_count(self):
return self.count
def __str__(self):
return "Total word count is: " + str(self.__count)
if __name__ == "__main__":
count = WordCounter()
print(count)
count.set_count("/home/swim/Desktop/word_counter.txt")
print(count.get_word_count())
print(count)
这是输出:
总字数为:0
['此处','是'' a','束','',& #39;文字。','希望','所有','','这','得到','','正确。','这里','它','去。& #39]
16
总字数为:0
我可以看到我的get和set方法正常工作。但是如何将self.count变量存储在count对象中?
print(count)在get / set之前和之后计算为0。
我希望 str 方法在行count.set_count(" / path / to / my / text / file")之后打印16。
有什么建议吗?谢谢
答案 0 :(得分:0)
如果您将__init__
语句中的一行更改为:
self.count = count
答案 1 :(得分:0)
#! /usr/bin/python3
class WordCounter:
def __init__(self, count = 0):
self.__count = count
def set_count(self, path):
try:
nfile = open(path, "r")
except:
print("Could not open file")
fileList = []
lowerCaseList = []
line = nfile.read()
fileList.append(line.split())
nfile.close()
lowerCaseList = [word.lower() for word in fileList[0]]
print(lowerCaseList)
self.__count = len(lowerCaseList)
def get_word_count(self):
return self.__count
def __str__(self):
return "Total word count is: " + str(self.__count)
if __name__ == "__main__":
count = WordCounter()
print(count)
count.set_count("/home/swim/Desktop/word_counter.txt")
print(count.get_word_count())
print(count)
再次感谢roganjosh指出self.count
和self.__count
应该是相同的属性,但是给出了不同的名称。
答案 2 :(得分:0)
在init
方法中,您使用self.__count = count
设置了__count
,而在getter和setter方法中,使用的self.count
与self.__count
不同。然后在您的__str__
方法中,使用self.__count
到__init__
中设置的0
,并且永远不会更改getter或setter中的self.__count
值。
因此,要么在每种方法中使用self.__count
,要么在每种方法中使用self.count