如何将parameter passing给__init__函数

我正在开始我的Python旅程。 我想创build一个程序,将我的xlsx文件转换成一个SQL文件,然后将数据加载到数据库中。

我想创build将有两个参数的类:

  • 前 – 将打开xlsx工作簿
  • sh – 将以正确的索引从ex打开表单

这是最初的版本(现在我只是打印行):

class XToSql(): def __init__(self, ex = xlrd.open_workbook('ex1.xlsx'), sh = ex.sheet_by_index(0)): self.ex = ex self.sh = sh def modify(self): for i in str((self.sh.nrows-1)): a = 1 print(self.sh.row_values(a)) a += 1 a1 = XToSql() a1.modify() 

__init__函数中,这行用红色标记: sh = ex.sheet_by_index(0) ->这个错误出现在运行之后: def __init__(self, ex = xlrd.open_workbook('ex1.xlsx'), sh = ex.sheet_by_index(0)):

 NameError: name 'ex' is not defined 

任何想法我做错了什么?

__init__的参数列表中, ex尚未被评估,因此sh = ex.sheet_by_index(0))正在sh = ex.sheet_by_index(0)) NameError。 这是在创build类对象时发生的。

你可以做几件事情。 编写一个类的一个原因是你可以重用它,所以也许这个类只应该把filepath作为参数。

 class XToSql(): def __init__(self, ex_file): self.ex = xlrd.open_workbook(ex_file) self.sh = self.ex.sheet_by_index(0) def modify(self): for i in str(self.sh.nrows - 1): a = 1 print(self.sh.row_values(a)) a += 1 

也许你应该能够指定要处理的工作表

 class XToSql(): def __init__(self, ex_file, sheet=0): self.ex = xlrd.open_workbook(ex_file) self.sh = self.ex.sheet_by_index(sheet)) def modify(self): for i in str(self.sh.nrows - 1): a = 1 print(self.sh.row_values(a)) a += 1 

像这样使用它

 a = XToSql(ex_file='ex1.xlsx', sheet=0) 

ex直到__init__方法体内才可用。 您不能访问方法体外的方法参数。

你需要做如下的事情:

 class XToSql: def __init__(self, ex, sh=None): self.ex = ex if sh is None: sh = ex.sheet_by_index(0) self.sh = sh 

然后像这样调用它:

 a1 = XToSql(xlrd.open_workbook('ex1.xlsx'))