2

私には2つのクラスがあり、最初のクラスには関数move(creature、board)があります。次に、クリーチャークラスにmoveを呼び出す関数があるので、クリーチャークラスにいる間に現在のクリーチャーをmove関数に渡すにはどうすればよいですか?それはmove(self、self.board)である必要があります。これを試してみると、「インポートからの未定義の変数:move」エラーが発生するためです。

関連するコードは次のとおりです。

生き物:

class creature: 
    def __init__(self, social, intelligence, sensory, speed, bravery, strenght, size):
        self.traits = [social, intelligence, sensory, speed, bravery, strenght]
        self.x = 0
        self.y = 0
        self.hunger = 10
        self.energy = 30
        self.shelter = 0
        self.dominance = 0
        self.boardSize = size - 1
        self.SOCIAL = 0
        self.INTELLIGENCE = 1
        self.SENSORY = 2
        self.SPEED = 3
        self.BRAVERY = 4
        self.STRENGTH = 5
 ...
 def performAction(self, action, location):
       ...     
       if action == "storeFood":
          food = location.vegetation
          location.vegetation = -1
          simulation.move(self, self.shelter)
          self.shelter.foodStorage += food
       ...

シミュレーション:

class simulation():
    def __init__(self, x):
        self.creatures = {creature.creature():"", creature.creature():"", }
        self.map = land.landMass
        self.lifeCycles = x
        self.runStay = ["rfl", "rbf", "rbl", "rbf", ]
        self.befriend = ["bbl", "bbf"]
        self.fight = ["fbl", "fbf", "bfl", "bff", "ffl", "fff"]
...    
    def move(self, creature, target):
            map[creature.x][creature.y].creatures.remove(creature)
            creature.energy -= abs(map[creature.x][creature.y].elevation - target.elevation) / creature.getSpeed() 
            target.creatures.append(creature)
            creature.x, creature.y = target.location
            ...  

編集:OK、それで私は問題をいくらか解決しました。Pythonではsimulation.simulation.map(self, self.shelter)、クラスファイルだけでなく、そのクラスのインスタンスも必要であると想定している必要があります。したがって、新しい質問は、そのインスタンスを別の場所に作成してから渡す必要があるかどうかです。それとも、これはどこか別の場所のシミュレーションのインスタンスで機能しますか?

4

1 に答える 1

2

simulationクラスをクラスに継承しcreatureます。

class Creature(Simulation): # I have inherited the functions from Simulation into Creature
    ...

の代わりにsimulation.move(self, self.shelter)、次のものが必要です。

self.move(yourparameters)

お気づきの場合は、クラス名を大文字にしました。そうするのは良いことです。

クラスの継承の詳細については、[ドキュメント] を参照してください。( http://docs.python.org/2/tutorial/classes.html#inheritance )

于 2013-03-24T05:10:50.440 に答える