是否可以在 Python 中创建一个实例方法,将实例变量作为参数,如下所示:var.method()?
Is it possible in Python to create an instance method that takes as an argument an instance variable like this: var.method()?
我一直在为这个问题苦苦挣扎:
我已经开始创建解决数独的代码,并且到目前为止我已经成功地完成了大部分工作。我创建了一个名为“Sudoku”的 class,它包含一个实例变量:带有所有插入数字的 Sudoku 网格。
我还创建了一些允许我访问或修改部分数独的方法,目前没有问题。但现在我必须引入一个新的实例变量,即带有数字注释的数独网格。问题出在我之前写的方法上。
密码是:
def get_line(self, line):
if 0 < line < 10:
return self.sudoku[9*(line-1):9*line]
return None
正如你在我刚刚写的方法中看到的那样
self.sudoku
(“sudoku”是包含插入数字的网格的实例变量,它是一个包含81个元素的列表,这是逐行插入的数独数字)我直接修改了sudoku变量。但是现在我无法使用相同的方法访问带有注释的网格,因为它会 return 数独线。
我想知道我是否可以做这样的事情
self.sudoku.get_line()
或
self.annotations.get_line()
我使用的方法将我在调用方法本身之前编写的变量作为参数。是否可以编写这样的方法?
我知道还有一些其他方法可以解决这个特定问题,但我想在 Python 中找到类似的方法是否可行。
感谢所有愿意帮助我的人,我无法在其他任何地方找到解决方案。
如果我没理解错的话,你想要
self.foo.getline(fie)
self.bar.getline(fum)
相当于
self.getline(foo, fie)
self.getline(bar, fum)
(有点像让getline
拥有不同的“自己”)?
这就是 Python,可能有一些可怕的技巧可以使用,但是让 foo 和 bar 成为实现 getline( ), 数独 class 可以委托给?
嗯..如果网格中的每个方块都包含一个数字和一个注释,那么每个方块都应该是 class 的一个实例,例如:
class SudokuSquare():
def __init__(self, number=None, annotation=None):
super().__init__(self)
self.number, self.annotation = number, annotation
def __str__(self):
return '%s' % (self.number or '')
如果您使用这些 classes 的实例填充您的列表,而不是普通整数,那么当您获取一行时,您会立即获取所有内容。不需要两个平行的网格。
然后我的另一个建议是使用列表列表来表示您的行和列,如下所示:
class 数独游戏():
def __init__(self):
self.rows = []
for _ in range(9):
self.rows.append([ SukokuSquare() for _ in range(9) ])
def get_line(self, num):
if num < 1 or num > 9:
return None
return self.rows[num-1]
实例化 class Sudoku
会给你一个包含 9 行列表的数独对象,每行包含 9 SudokuSquare
的列表,每个都有一个存储 number
和 annotation
.
现在,如果我想将第 9 行第 9 位的数字设置为值 6,我会这样做:
拼图=数独()
puzzle.get_line(9)[8].number = 6
但是,我仍然直接访问包含行(行)的列表,也许我不想这样做。那么也许你想要另一个名为 SudukoRow 的 class,它具有get_square
方法...
我会把那部分留给你去想办法...
我一直在为这个问题苦苦挣扎: 我已经开始创建解决数独的代码,并且到目前为止我已经成功地完成了大部分工作。我创建了一个名为“Sudoku”的 class,它包含一个实例变量:带有所有插入数字的 Sudoku 网格。
我还创建了一些允许我访问或修改部分数独的方法,目前没有问题。但现在我必须引入一个新的实例变量,即带有数字注释的数独网格。问题出在我之前写的方法上。
密码是:
def get_line(self, line):
if 0 < line < 10:
return self.sudoku[9*(line-1):9*line]
return None
正如你在我刚刚写的方法中看到的那样
self.sudoku
(“sudoku”是包含插入数字的网格的实例变量,它是一个包含81个元素的列表,这是逐行插入的数独数字)我直接修改了sudoku变量。但是现在我无法使用相同的方法访问带有注释的网格,因为它会 return 数独线。
我想知道我是否可以做这样的事情
self.sudoku.get_line()
或
self.annotations.get_line()
我使用的方法将我在调用方法本身之前编写的变量作为参数。是否可以编写这样的方法?
我知道还有一些其他方法可以解决这个特定问题,但我想在 Python 中找到类似的方法是否可行。
感谢所有愿意帮助我的人,我无法在其他任何地方找到解决方案。
如果我没理解错的话,你想要
self.foo.getline(fie)
self.bar.getline(fum)
相当于
self.getline(foo, fie)
self.getline(bar, fum)
(有点像让getline
拥有不同的“自己”)?
这就是 Python,可能有一些可怕的技巧可以使用,但是让 foo 和 bar 成为实现 getline( ), 数独 class 可以委托给?
嗯..如果网格中的每个方块都包含一个数字和一个注释,那么每个方块都应该是 class 的一个实例,例如:
class SudokuSquare():
def __init__(self, number=None, annotation=None):
super().__init__(self)
self.number, self.annotation = number, annotation
def __str__(self):
return '%s' % (self.number or '')
如果您使用这些 classes 的实例填充您的列表,而不是普通整数,那么当您获取一行时,您会立即获取所有内容。不需要两个平行的网格。
然后我的另一个建议是使用列表列表来表示您的行和列,如下所示:
class 数独游戏():
def __init__(self):
self.rows = []
for _ in range(9):
self.rows.append([ SukokuSquare() for _ in range(9) ])
def get_line(self, num):
if num < 1 or num > 9:
return None
return self.rows[num-1]
实例化 class Sudoku
会给你一个包含 9 行列表的数独对象,每行包含 9 SudokuSquare
的列表,每个都有一个存储 number
和 annotation
.
现在,如果我想将第 9 行第 9 位的数字设置为值 6,我会这样做:
拼图=数独() puzzle.get_line(9)[8].number = 6
但是,我仍然直接访问包含行(行)的列表,也许我不想这样做。那么也许你想要另一个名为 SudukoRow 的 class,它具有get_square
方法...
我会把那部分留给你去想办法...