如果一个类中的方法使用另一个类中的方法,我该怎么办?

时间:2014-04-11 05:07:29

标签: python class methods

我有这个类(在一个名为“ occ_grid.py ”的文件中):

class Grid:
   def __init__(self, width, height, occupancy_value):
      self.width = width
      self.height = height
      self.cells = []

      # initialize grid to all specified occupancy value
      for row in range(0, self.height):
         self.cells.append([])
         for col in range(0, self.width):
            self.cells[row].append(occupancy_value)

   def set_cell(self, point, value):
      self.cells[point.y][point.x] = value

   def get_cell(self, point):
      return self.cells[point.y][point.x]

我有另一个类/方法(在文件“ worldmodel.py ”中):

class WorldModel:
   def __init__(self, num_rows, num_cols, background):
      self.background = occ_grid.Grid(num_cols, num_rows, background)
      self.num_rows = num_rows
      self.num_cols = num_cols
      self.occupancy = occ_grid.Grid(num_cols, num_rows, None)
      self.entities = []
      self.action_queue = ordered_list.OrderedList()


   def is_occupied(self, pt):
      return (self.within_bounds(pt) and
         occ_grid.get_cell(self.occupancy, pt) != None)

请注意“ def is_occupied ”如何使用方法“get_cell”。问题是,“get_cell”位于不同的文件中,它是不同类中的方法。我考虑过创建一个新的“网格”对象,但我很困惑我的代码中应该创建这个对象的位置。

2 个答案:

答案 0 :(得分:4)

你非常接近。它只是:

self.occupancy.get_cell(pt)

可以写:

occ_grid.Grid.get_cell(self.occupancy, pt)

那将是等同于 - 但是,这非常 unidiomatic

答案 1 :(得分:0)

要从文件Grid中完全使用worldmodel.py,您需要import Grid类。

您可以通过两种可能的方式执行此操作。

  1. import occ_grid。如果您这样做,则必须使用Grid
  2. 访问occ_grid.Grid
  3. from occ_grid import Grid。然后,您只需使用Grid
  4. 即可使用它

    mgilson的答案非常清楚如何在导入后使用它。