Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在初始化之外的方法中添加类继承?_Python_Class_Subclass - Fatal编程技术网

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

Python 如何在初始化之外的方法中添加类继承?,python,class,subclass,Python,Class,Subclass,我想定义一个类的子类,我需要将它升级到类的一个方法中,而不是从一开始就初始化 示例是一个带有网格和网格中的距离的爱好项目。 因此,我启动了一个网格类,如下所示: 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 _

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

示例是一个带有网格和网格中的距离的爱好项目。
因此,我启动了一个网格类,如下所示:

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):
    ...
棘手的部分来了。由于我不希望它被初始化,而是改进为,我需要父类上的一个方法使其成为子类(看起来几乎是递归的,但希望不是)

这能做到吗?我会继续努力的。 谢谢你说,“因为我不希望它被初始化,而是改进为,我需要父类上的一个方法使它成为子类”。你听说过用构图代替继承吗?这样,您就可以在父类上有一个方法为其提供一个DistanceGrid实例,作为类属性之一。大概是这样的:

from distances import DistanceGrid

class Grid: 
  ...

  def upgrade_distance(self, root):
    self.distance_grid = DistanceGrid()
    self.distance_grid.set_distances(root)
Grid类中的其余方法可以对升级后要运行的方法执行
self.distance\u Grid
,也可以忽略它(如果不需要)。也许这对你有用


编辑:您还可以制作3个类;1-DistanceGrid、2-Grid、3-Choice,其中Choice类是您创建的唯一一个类,它继承自其他两个类,您可以决定要调用的方法。

您的逻辑让我无法理解。。。你想干什么?这将如何使用?“我不想初始化”是什么意思?据我所见,您没有初始化任何东西在
网格中使用距离相关函数对我来说没有意义。如果你想这样做,为什么它不是一个距离网格呢?这是一个棘手的部分。距离不是自然的,因为它取决于根单元格,这是任意的。因此,不需要将整个距离网格初始化为,而是通过选择根单元格将其改进为。谢谢你接受我的逻辑。事实上,在一个爱好项目中有一个棘手的部分,而其他Pythonistas甚至不明白为什么会存在这个棘手的部分,这强烈地暗示着你手头有一个设计问题。重组你的程序,而不是寻找丑陋的黑客。谢谢。这正是我所需要的精神。但我仍然需要对调用方法和继承进行微调,我不想从复合对象调用这些方法和继承。
from distances import DistanceGrid

class Grid: 
  ...

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