Python 在另一个方法中调用另一个方法

Python 在另一个方法中调用另一个方法,python,function,openpyxl,dry,Python,Function,Openpyxl,Dry,对Python来说有些陌生,但这是一个关于编写函数而不重复自己的问题 使用openpyxl我创建了一个文档类和一个工作簿(wb),里面有3张纸: self.sheet1 = self.wb['sheet1'] self.sheet2 = self.wb['sheet2'] self.sheet3 = self.wb['sheet3'] 我在这个类中还有一个函数,它在sheet3的行中查找特定的文本 def find_text_row_number(self, text): text_r

对Python来说有些陌生,但这是一个关于编写函数而不重复自己的问题

使用
openpyxl
我创建了一个文档类和一个工作簿(
wb
),里面有3张纸:

self.sheet1 = self.wb['sheet1']
self.sheet2 = self.wb['sheet2']
self.sheet3 = self.wb['sheet3']
我在这个类中还有一个函数,它在
sheet3
的行中查找特定的文本

def find_text_row_number(self, text):
    text_row_number = set([])

    for row in self.sheet3.iter_rows(self.sheet3.min_row,self.sheet3.max_row):
        for cell in row:
            if cell.value == text:
                text_row_number.add(cell.row)

    return sorted(text_row_number)
我的问题是:我如何在程序中的其他地方调用此函数,并让它搜索
sheet2
,而不是
sheet3
已尝试查找装饰器并使用默认值(
sheet=self.sheet3
),但这会导致错误,因为尚未定义
self


有没有更有效的方法来编写这个函数?或者我缺少的Python的某些方面在这里可能会有所帮助?

不要使用单独的变量,将所有工作表放在一个列表中。然后你可以通过索引访问你想要的

第一个代码将初始化列表:

self.sheets = [self.wb['sheet1'], self.wb['sheet2'], self.wb['sheet3']]
然后,您的另一个方法可以采用可选索引

def find_text_row_number(self, text, sheet_num = 3):
    sheet = self.sheets[sheet_num-1]
    text_row_number = set([])

    for row in sheet.iter_rows(sheet.min_row,sheet.max_row):
        for cell in row:
            if cell.value == text:
                text_row_number.add(cell.row)

    return sorted(text_row_number)
要处理
表2
,请使用

x.find_text_row_number("text", sheet_num = 2)
尝试:

def find_text_row_number(self, text, sheet_name='sheet1'):
    text_row_number = set([])
    sheet = getattr(self, sheet_name)

    for row in sheet.iter_rows(sheet.min_row, sheet.max_row):
        for cell in row:
            if cell.value == text:
                text_row_number.add(cell.row)

    return sorted(text_row_number)