这代表了一个简单的课程,我试图练习OOP。
import csv
import logging
class LoaderCSV:
def __init__(self, file):
self.file = file
if file is None:
logging.warning('Missing input file.')
def load(self):
with open(self.file) as f:
holder = csv.reader(f)
file_data = list(holder)
return file_data
当我用以下方式打电话给这个课时会发生什么:
data = LoaderCSV.load(input_file)
我得到了
line 14, in load
with open(self.file) as f:
AttributeError: 'str' object has no attribute 'file'
我必须弄乱一些东西,但不能理解什么。我以前的尝试就这样工作得很好。我只是不明白为什么
self.file
在__init__
答案 0 :(得分:2)
问题是您正在将实例方法作为静态方法调用,因此传入的文件名不是self
。正确的方法是:
loader = LoaderCSV(input_file)
data = loader.load()
这会将loader
作为self
参数传递,允许您访问对象的file
字段中的文件名。
查看classes上的Python文档以获取更多信息。
答案 1 :(得分:1)
您需要先创建LoaderCSV
对象,然后在该对象上调用load
方法。
loader = LoaderCSV(input_file)
data = loader.load()
答案 2 :(得分:0)
使用实例方法load
的方法是创建类的实例,然后在该类上调用该方法。像这样:
myloader = LoaderCSV(input_file)
data = myloader.load()
或简洁地说:
data = LoaderCSV(input_file).load()