У меня есть следующий код:Как Python имен декоратор разрешать
import threading
from functools import wraps
class Synchronized(object):
def __init__(self):
self.lock = threading.Lock()
def synchronized(f):
@wraps(f)
def wrapper(self, *args, **kwargs):
with self.lock:
print "here"
return f(self, *args, **kwargs)
return wrapper
@synchronized
def go(self):
print 1
class B(Synchronized):
@synchronized
def foo(self):
return 1
Этот код терпит неудачу на импорт жалуясь:
File "a.py", line XXX, in B
@synchronized
NameError: name 'synchronized' is not defined
Однако, если я закомментировать B и просто использовать Syncrhonized().go()
он прекрасно работает.
Вопрос: Как питон знать, что в базовом классе @synchronized
, но не решить ее в его производных?
Почему вы хотите, чтобы синхронизировался как метод, а не как функция? – bereal
Потому что я хочу сохранить его внутри класса для лучшей организации кода. –