在python中的OOP失败了

时间:2016-02-01 18:38:17

标签: python oop object

这代表了一个简单的课程,我试图练习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__

下定义时,不会传递分配给参数的值

3 个答案:

答案 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()