我想定义一个类的子类,我需要将它升级到类的某个方法中,而不是从一开始就初始化
例如一个有网格和网格中距离的爱好项目。
所以我开始了这样一个网格类:
class Grid:
def __init__(self):
# A grid is a list of lists of cells.
self.grid = self.prepare_grid()
self.configure_cells()
self.maze = None
def __getitem__(self, a_tuple):
x, y = a_tuple
return self.grid[x][y]
def prepare_grid(self):
...
def configure_cells(self):
...
然后我想添加距离功能。我在想,就像在一个游戏中,你已经改进成为一个距离网格,方法如下:
class DistanceGrid(Grid):
def set_distances(self, root_cell):
...
def path_to(self, goal):
...
棘手的部分来了。因为我不希望它被初始化,而是改进为,所以我需要父类上的一个方法使其成为子类(看起来几乎是递归的,但希望不是)
from distances import DistanceGrid
class Grid:
...
def upgrade_distance(self, root):
self = type(self, DistanceGrid)
self.set_distances(root)
这能做到吗?我会继续努力的。 谢谢
你说,“因为我不希望它被初始化,而是改进为,我需要父类上的一个方法使它成为子类”。你听说过用构图代替继承吗?它将使您在父类上有一个方法将DistanceGrid实例作为类属性之一提供给它。像这样:
如果
self.distance_grid
是要在升级后运行的方法,则Grid类中的其余方法可以作用于它,如果不需要,则可以忽略它。也许这对你有用编辑:你也可以做3个类;1-DistanceGrid,2-Grid,3-Choice,其中Choice类是您创建的唯一一个类,它从其他两个类继承,并且您可以在执行时决定要调用哪些方法
相关问题 更多 >
编程相关推荐