#python
#python
Вопрос:
Небольшой вопрос о глобальных значениях. У меня есть следующий код:
counter = 0
class A():
global counter
def connect():
counter = 1
print("Opening connection",counter)
# DO STUFF
def disconnect():
counter -= 1
print("Closing connection",counter)
# DO STUFF
Каждый раз, когда я подключаюсь или отключаюсь, я хочу знать количество открытых подключений counter
(не только для одного экземпляра, а для всех экземпляров, поэтому оно должно быть статическим). Но при запуске кода я получаю:
local variable 'counter' referenced before assignment
Почему это так? Считайте, что A()
она находится в другом файле, чем main
.
Комментарии:
1. «глобальное» объявление работает только в функции / методе.
2. вам не нужно писать lobal counter в классе, но вы должны сделать это в методах
3. @Michael Butscher, я знаю, на самом деле я редактировал, я допустил ошибку при написании
Ответ №1:
Как сказано в комментариях, global
объявление работает только в функции или методе.
counter = 0
class A():
def connect():
global counter
counter = 1
print("Opening connection",counter)
# DO STUFF
def disconnect():
global counter
counter -= 1
print("Closing connection",counter)
# DO STUFF
Комментарии:
1. Спасибо. Если у меня есть два экземпляра
A()
, они разделяют счетчик, верно?2. Да. P.S — Это ограничение на количество слов в комментарии раздражает.
Ответ №2:
Вы должны сделать это:
counter = 0
class A():
def connect():
global counter
counter = 1
print("Opening connection",counter)
# DO STUFF
def disconnect():
global counter
counter -= 1
print("Closing connection",counter)
# DO STUFF
Ответ №3:
Вы должны переместить глобальный счетчик внутри функций.
Также, если вы используете многопоточность / многопроцессорность, вы должны использовать семафор при обновлении счетчика.