如何在对象的实例中正确存储值?

时间:2017-12-31 19:21:52

标签: python oop object

我正在学习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。

有什么建议吗?谢谢

3 个答案:

答案 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.countself.__count应该是相同的属性,但是给出了不同的名称。

答案 2 :(得分:0)

init方法中,您使用self.__count = count设置了__count,而在getter和setter方法中,使用的self.countself.__count不同。然后在您的__str__方法中,使用self.__count__init__中设置的0,并且永远不会更改getter或setter中的self.__count值。

因此,要么在每种方法中使用self.__count,要么在每种方法中使用self.count