0

ユニットを移動するロボットクラスと、ユニットの位置を追跡するマップクラスの2つのクラスがあります。アトラスには1つのアトラスクラスと複数のロボットクラスがあります。クラスRobotのAtlasで関数を使用するにはどうすればよいですか。

class Atlas:
    def __init__(self):
        self.robots = []
        self.currently_occupied = {}

    def add_robot(self, robot):
        self.robots.append(robot)
        self.currently_occupied = {robot:[]}   

    def all_occupied(self):
        return self.currently_occupied

    def occupy_spot(self, x, y, name):
        self.currently_occupied[name] = [x, y]


class Robot():
    def __init__(self, rbt):
        self.xpos = 0
        self.ypos = 0
        atlas.add_robot(rbt)  #<-- is there a better way than explicitly calling this atlas
        self.name = rbt

    def step(self, axis):
        if axis in "xX":
            self.xpos += 1 
        elif axis in "yY":
            self.ypos += 1
        atlas.occupy_spot(self.xpos, self.ypos, self.name)

    def walk(self, axis, steps=2):
        for i in range(steps):
            self.step(axis)



atlas = Atlas()  #<--  this may change in the future from 'atlas' to 'something else' and would break script
robot1 = Robot("robot1")
robot1.walk("x", 5)
robot1.walk("y", 1)
print atlas.all_occupied()

私は14歳で、プログラミングは初めてです。これは練習プログラムであり、グーグルやヤフーでこれを見つけることができません。助けてください

4

2 に答える 2

5

参照しているオブジェクトのメソッドにのみアクセスできます。おそらく、のインスタンスをAtlas初期化子に渡す必要があります。

class Robot():
  def __init__(self, rbt, atlas):
    self.atlas = atlas
     ...
    self.atlas.add_robot(rbt)
于 2012-05-16T02:48:05.533 に答える
0

これがあなたがそれをすることができる1つの方法です

class Atlas:
    def __init__(self):
        self.robots = []
        self.currently_occupied = {}

    def add_robot(self, robot):
        self.robots.append(robot)
        self.currently_occupied[robot.name] = []
        return robot

    def all_occupied(self):
        return self.currently_occupied

    def occupy_spot(self, x, y, name):
        self.currently_occupied[name] = [x, y]


class Robot():
    def __init__(self, rbt):
        self.xpos = 0
        self.ypos = 0
        self.name = rbt

    def step(self, axis):
        if axis in "xX":
            self.xpos += 1 
        elif axis in "yY":
            self.ypos += 1
        atlas.occupy_spot(self.xpos, self.ypos, self.name)

    def walk(self, axis, steps=2):
        for i in range(steps):
            self.step(axis)



atlas = Atlas()
robot1 = atlas.add_robot(Robot("robot1"))
robot1.walk("x", 5)
robot1.walk("y", 1)
print atlas.all_occupied()
于 2012-05-16T05:12:40.293 に答える