Python 3:继承Sheet对象,给定错误对象没有属性';dict#u reader'; 我想在Sheet对象(xlrd包)中添加新方法,下面是代码(在Sheet.py文件中):

Python 3:继承Sheet对象,给定错误对象没有属性';dict#u reader'; 我想在Sheet对象(xlrd包)中添加新方法,下面是代码(在Sheet.py文件中):,python,Python,问题是,当我调用该方法时,它会给我AttributeError:“Sheet”对象没有属性“dict\u reader” 在我想使用的文件(file.py)中,代码是这样的: import xlrd from ..sheet import Sheet workbook = xlrd.open_workbook(filename) worksheet = workbook.sheet_by_index(0) reader = worksheet.dict_reader(columns) 在ini

问题是,当我调用该方法时,它会给我AttributeError:“Sheet”对象没有属性“dict\u reader”
在我想使用的文件(file.py)中,代码是这样的:

import xlrd
from ..sheet import Sheet
workbook = xlrd.open_workbook(filename)
worksheet = workbook.sheet_by_index(0)
reader = worksheet.dict_reader(columns)
init.py文件中:

from . import Models_directory
我的目录结构是这样的(是的,它是Odoo模块目录体系结构):


为类和从外部模块导入的类使用相同的名称是不明智的。使用类似于“MySheet”的内容,假设Sheet或MySheet具有所需的属性
dict\u reader

这不使用您的类,则问题将得到解决。工作簿返回的工作表。工作表索引(0)不是您的工作表类,而是原始工作表类。 要将您的方法放入此特定的工作表实例中,您可以:

import xlrd
import types

def dict_reader(self, fieldnames):
    list_dict = []
    for i, _ in enumerate(range(self.nrows)):
        temp_dict = {}
        for j, _ in enumerate(range(self.ncols)):
            temp_dict.update(fieldnames[j], self.cell_value(i, j))
        list_dict.ap

workbook = xlrd.open_workbook(filename)
worksheet = workbook.sheet_by_index(0)
worksheet.dict_reader = types.MethodType(dict_reader,worksheet)
reader = worksheet.dict_reader(columns)

但这仍然没有运行,因为“列”没有定义。

GG,这就是我要找的。详情如下:
Main_directory
    Sheet.py
    Models_directory
        file.py
    __init__.py
import xlrd
import types

def dict_reader(self, fieldnames):
    list_dict = []
    for i, _ in enumerate(range(self.nrows)):
        temp_dict = {}
        for j, _ in enumerate(range(self.ncols)):
            temp_dict.update(fieldnames[j], self.cell_value(i, j))
        list_dict.ap

workbook = xlrd.open_workbook(filename)
worksheet = workbook.sheet_by_index(0)
worksheet.dict_reader = types.MethodType(dict_reader,worksheet)
reader = worksheet.dict_reader(columns)