Если вы хотите выполнить (условное) действие при присваивании значению, вы бы хотели, чтобы это был атрибут объекта, для которого вы можете перехватить присвоение.Перегрузите метод __setattr__
или используйте property
.Например:
class C:
def __init__(self, trigger, init_val=0):
self._v = init_val
self.trigger = trigger
@property
def v(self):
return self._v
@v.setter
def v(self, value):
if value == self.trigger:
print("Trigger {} hit, perform some action.".format(value))
else:
print("Nothing to do for {}".format(value))
self._v = value
c = C(10)
while c.v < 12: # Go couple turns past the "event" to see its effect
c.v += 1
Я подозреваю, что вы действительно после, хотя в этих двух вопросах нужно запустить оба цикла, чтобы вы могли продолжать считать события переключения и контролировать вращение двигателя до тех пор, пока последний не остановится последостижение порога в первом.Есть и другие способы достичь этого, например, всплывают нити.В следующем примере я позволил счетчику работать в отдельном потоке, и петля двигателя проверила, насколько далеко продвинулся счетчик:
from threading import Thread
from time import sleep
class Counter(Thread):
def __init__(self, limit):
self.value = 0
self.limit = limit
super().__init__()
def run(self):
while self.value < self.limit:
# We'd be acquiring and accumulating actual values here
sleep(1)
self.value += 1
print("Counter now at {}".format(self.value))
counter = Counter(10)
counter.start()
while counter.value < counter.limit:
print("Spinning motor")
sleep(0.5) # do actual work here
print("Stop motor")
Вы можете объединить оба примера, а также запустить и / или двигательконтролировать в своем собственном потоке.Однако, если переключение опроса и вращающийся двигатель происходят на одной частоте, было бы намного проще просто вести подсчет и сравнивать его значение с пределом в пределах одного цикла.В случае, если двигатель запускается одним действием и его необходимо остановить другим действием, когда предел достигнут, просто запустите, зациклите извлечение переключателя и остановите его, как только этот цикл завершится.