使用open()函数时提示AttributeError: 'str' object has no attribute 'filename'

使用open()函数时提示AttributeError: 'str' object has no attribute 'filename'

问题相关代码,请勿粘贴截图

gapfilling.py

class Gapfilling:
    def __init__(self, filename):
        self.filename = filename
    
    def open_file(self):
        with open(self.filename, 'r') as file_object:
            return file_object
        
    def get_items(self):
        lines = Gapfilling.open_file(self.filename).readlines()
        return lines

test = Gapfilling('GP_turbine.txt')
x = test.get_items()
print(x)

运行结果及报错内容
Traceback (most recent call last):
  File "I:\PythonProgram\QstBankCreating\main.py", line 5, in 
    x = test.get_items()
  File "I:\PythonProgram\QstBankCreating\gapfilling_function.py", line 10, in get_items
    lines = Gapfilling.open_file(self.filename).readlines()
  File "I:\PythonProgram\QstBankCreating\gapfilling_function.py", line 6, in open_file
    with open(self.filename, 'r') as file_object:
AttributeError: 'str' object has no attribute 'filename'

运行后提示:

我的解答思路和尝试过的方法

在类中传递一个字符串失败,实在找不出破的办法,愿解答

不应该用with好吧,就用open,可以这么写:


class Gapfilling:
    def __init__(self, filename):
        self.filename = filename

    def open_file(self):
        file_object = open(self.filename, 'r')
        return file_object

    def get_items(self):
        obj = self.open_file()
        lines = obj.readlines()
        obj.close()
        return lines


test = Gapfilling('name.txt')
filename = test.filename
print(test)
print(filename)
print(test.get_items())
# <__main__.Gapfilling object at 0x0000028ADE5D2380>
# name.txt
# ['Tom']

你这open_file是个无参函数,但你get_items调用它时却给了一个参数
lines = Gapfilling.open_file(self.filename).readlines()
改为
lines = open_file().readlines() 试试
另外第3行应该是self.filename = filename,不要加引号啊

改成这样:

class Gapfilling:
    def __init__(self, filename):
        self.filename = 'filename'

    def open_file(self):
        with open(self.filename, 'r') as file_object:
            return file_object

    def get_items(self):
        lines = self.open_file().readlines()
        return lines

test = Gapfilling('GP_turbine.txt')
x = test.get_items()
print(x)