Я думаю, вам нужно заменить
def Move(self):
с:
def Move(self, coord):
И после вызова этой функции, передавая новые координаты в качестве аргумента, что-то вроде:
obj.Move((10, 20))
Где в примере (10, 20)
- координаты нового объекта (я не уверен, что это то, что делает ваш код, но я предполагаю, что это должно быть естественное поведение функции с именем 'Move').
Из официальной документации : Если имя вообще не найдено, возникает исключение NameError.
Имена в python (как лучше объяснено в Code Как Pythonista: Idiomatic Python ) - это то, что в других языках вы называете переменными. Итак:
NameError: global name 'coord' is not defined
в основном означает, что компилятор не знает, что такое 'координаты'.
Примечание: Вы не должны вызывать вашу переменную 'object', скрывающую встроенный [object
] [3], который является базовым классом для каждого класса.
Также я не вижу смысла делать что-то вроде:
for i in xrange(N): # Notice that I also used a different name here: i
obj = Point(circular,r1,r2)
потому что это то же самое, что и
obj = Point(circular,r1,r2)
Обновление: Может быть, вы пытаетесь сделать что-то вроде:
# maybe you want to put this inside a function so every time you get
# different random numbers
def circular():
return RD.uniform(0,100), RD.uniform(0,100)
points = []
for i in xrange(N):
p = Point(circular(), r1, r2)
points.append(p)
activate(p, p.Move(circular())
simulate(until=maxTime)
for p in points:
activate(p, p.die())
simulate(until=maxTime)
Я никогда не использовал SimPy, так что это всего лишь мое дикое (и не по теме) предположение.
Также кажется, что у вас host
не определен в вашем Move
методе, но, возможно, он импортирован с from SimPy.SimulationTrace import *
. Использование from ... import *
- плохая практика, потому что мешают другим точно знать, что вы импортируете из этого модуля (я предполагаю, что это было сделано в руководстве по SimPy для быстрого запуска, но вы должны импортировать только то, что вам нужно).