Я пытаюсь изменить атрибут класса из функции обратного вызова, но значение атрибута всегда равно значению, которое оно было инициализировано как, например, 0. 0.Невозможно изменить/отредактировать атрибут/переменную класса из функции обратного вызова
class Rainfall:
def __init__(self):
self.rainHalfHourCounter = 0
def incrementRain(self,channel):
self.rainHalfHourCounter = self.rainHalfHourCounter + 1
print "incrementRain ",self.rainHalfHourCounter
rainfall = Rainfall()
GPIO.add_event_detect(11, GPIO.BOTH, callback = rainfall.incrementRain,bouncetime = 200)
while True:
print self.rainHalfHourCounter
Функция incrementRain
является функцией обратного вызова. Эта функция установлена на прерывание на одном из моих контактов RPi gpio (но в основном это просто функция обратного вызова). Значение изменяется в функции incrementRain
, но атрибут класса не изменится, и поэтому я не могу использовать self.rainHalfHourCounter
вне функции incrementRain
. Линия печати в цикле while всегда печатает 0. Он никогда не увеличивается. Является ли эта проблема безопасной потоком? Может быть, простое решение этой проблемы?
Любая помощь/короткий образец кода будет принята с благодарностью.
Как вы используете функцию incrementRain и атрибутов self.rainHalfHourCounter? Можете ли вы вставить связанный код? – user3885927
Я обновил код, я использую self.rainHalfHourCounter в нескольких местах, но для иллюстрации, значение self.rainHalfHourCounter не изменяется в цикле while. Это моя большая проблема. –
Просьба указать короткую ** ** программу **, которая демонстрирует ошибку. См. Http://SSCCE.org или http://stackoverflow.com/help/mcve для получения дополнительной информации. –