Python 如何设置类方法中引用的类范围变量

Python 如何设置类方法中引用的类范围变量,python,Python,我对python和编程有点陌生,所以我不确定我是否正确使用了术语,但是 我正在编写一个简短的程序,它将读取文本文件中的单词,将它们拆分成一个数组,然后只输出指定长度的单词 但是,我在尝试设置数组和文件变量时遇到了一个问题。虽然整个程序可以运行,但在每个函数中,我都会重新实例化文件变量(file=open()到file.close),我想知道是否有任何方法可以使变量在类范围内 我曾尝试通过在函数前缩进使它们在类范围内,但后来我得到了一个错误,因为name和set\u length尚未实例化 正如我

我对python和编程有点陌生,所以我不确定我是否正确使用了术语,但是

我正在编写一个简短的程序,它将读取文本文件中的单词,将它们拆分成一个数组,然后只输出指定长度的单词

但是,我在尝试设置数组和文件变量时遇到了一个问题。虽然整个程序可以运行,但在每个函数中,我都会重新实例化文件变量(file=open()到file.close),我想知道是否有任何方法可以使变量在类范围内

我曾尝试通过在函数前缩进使它们在类范围内,但后来我得到了一个错误,因为
name
set\u length
尚未实例化

正如我所说,这是我第一次在课堂上工作,所以任何建议都会很有帮助。谢谢

class FileParser:

    def __init__(self,name,set_length):
        self.name = name
        self.set_length = set_length

    def Print_words(self):

        File = open(self.name, "r")
        Allwords = File.read()
        words = Allwords.split("\n")
        File.close()

        for word in words:
            if len(word) <= self.set_length:
                print(word)

    def length_counter(self):

        File = open(self.name, "r")
        Allwords = File.read()
        words = Allwords.split("\n")
        File.close()

        x = 0

        for word in words:
            x += 1
        text = "there are {} many words in this file".format(x)
        return text
类文件解析器:
定义初始化(自我、名称、设置长度):
self.name=名称
self.set_length=set_length
def打印字(自我):
文件=打开(self.name,“r”)
Allwords=File.read()
words=Allwords.split(“\n”)
File.close()文件
用文字表示:

如果len(word)它不应该是类变量,因为每个
FileParser
实例读取不同的文件

您可以在
\uuuu init\uuuu
方法中读取文件,并将单词列表指定给实例属性

class FileParser:

    def __init__(self,name,set_length):
        self.name = name
        self.set_length = set_length
        with open(name, "r") as f:
            data = f.read()
        self.words = data.split("\n")

    def Print_words(self):
        for word in self.words:
            if len(word) <= self.set_length:
                print(word)

    def length_counter(self):
        text = "there are {} many words in this file".format(len(self.words))
        return text
类文件解析器:
定义初始化(自我、名称、设置长度):
self.name=名称
self.set_length=set_length
以open(名称“r”)作为f:
data=f.read()
self.words=data.split(“\n”)
def打印字(自我):
对于self.words中的单词:

如果len(word),它不应该是类范围的,因为每个实例读取不同的文件。把它放在
self中。所有单词
BTW,最后一个循环应该是
x=len(单词)
文件
变量完全是偶然的。您只需要使用它来填充
words
变量,后者才是您所关心的。在不需要的情况下重复读取文件是对资源的严重浪费。您应该创建一个方法来读取文件,在初始化实例时只调用一次,并将内容保存在实例变量中,例如
self.words
。太棒了,谢谢。with语句到底是做什么的?这就像是打开和关闭一个文件的组合,还是我弄错了?这就是问题所在。