如何在初始化之外的方法中添加类继承?

2024-10-02 00:38:34 发布

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

我想定义一个类的子类,我需要将它升级到类的某个方法中,而不是从一开始就初始化

例如一个有网格和网格中距离的爱好项目。
所以我开始了这样一个网格类:

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)

这能做到吗?我会继续努力的。 谢谢


Tags: of方法self网格configuredefrootprepare
1条回答
网友
1楼 · 发布于 2024-10-02 00:38:34

你说,“因为我不希望它被初始化,而是改进为,我需要父类上的一个方法使它成为子类”。你听说过用构图代替继承吗?它将使您在父类上有一个方法将DistanceGrid实例作为类属性之一提供给它。像这样:

from distances import DistanceGrid

class Grid: 
  ...

  def upgrade_distance(self, root):
    self.distance_grid = DistanceGrid()
    self.distance_grid.set_distances(root)

如果self.distance_grid是要在升级后运行的方法,则Grid类中的其余方法可以作用于它,如果不需要,则可以忽略它。也许这对你有用

编辑:你也可以做3个类;1-DistanceGrid,2-Grid,3-Choice,其中Choice类是您创建的唯一一个类,它从其他两个类继承,并且您可以在执行时决定要调用哪些方法

相关问题 更多 >

    热门问题