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)