如何将参数传递到初始化函数中

2024-09-27 00:23:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我将用Python开始我的旅程。我想创建一个程序,将我的xlsx文件转换成sql文件,然后将数据加载到数据库中。你知道吗

我想创建一个有两个参数的类:

  • ex-将打开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

你知道我做错了什么吗?你知道吗


Tags: 文件selfindexbyinitdefshopen
2条回答

__init__的参数列表中,ex尚未计算,因此sh = ex.sheet_by_index(0))抛出NameError。这在创建类对象时发生。你知道吗

你可以做几件事。编写类的一个原因是可以重用它,因此类可能只应将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'))

相关问题 更多 >

    热门问题