Python是否支持编写在实例变量上调用的var.method()形式的实例方法?
Python完全支持你想要的这种调用形式,实现逻辑如下:
核心思路是把原本存储为普通列表的数独主网格、标注网格,都封装为自定义的网格类实例,把get_line这类通用的网格操作方法都放到这个自定义类中即可。
代码实现示例
- 首先定义通用的网格类:
class SudokuGrid: def __init__(self, init_data=None): # 存储81个元素的网格数据,默认初始化为全0 self.data = init_data if init_data is not None else [0]*81 def get_line(self, line): if 0 < line < 10: return self.data[9*(line-1):9*line] return None # 其他通用网格操作(比如获取列、获取宫、修改单元格等)都可以放在这里
- 调整你原来的
Sudoku类,将两个网格都改为SudokuGrid的实例:
class Sudoku: def __init__(self, main_grid_data): # 主网格使用传入的初始数据 self.sudoku = SudokuGrid(main_grid_data) # 标注网格初始化为空 self.annotations = SudokuGrid()
- 之后就可以用你想要的形式调用:
# 获取数独主网格的第3行 self.sudoku.get_line(3) # 获取标注网格的第5行 self.annotations.get_line(5)
这种实现方式的可扩展性很强,后续如果需要新增其他网格通用操作,只要在SudokuGrid类中新增方法,两个网格实例就都可以直接复用,不需要重复编写逻辑。
内容的提问来源于stack exchange,提问作者federico
相关产品推荐
相关产品推荐

