Я новичок в Python и пытаюсь преобразовать некоторый код suppplied поставщика из python 2 в 3. Эта функция, похоже, проверяет, создан ли экземпляр класса, чтобы он не создавал связку из новых экземпляров, но я не уверен, как преобразовать его в python 3. Проверка класса класса vs выражение экземпляра особенно нуждается в модификации с старых и новых типов в pythong 2/3, но я не уверен, как это сделать , Любая помощь приветствуется.python 2 to 3 conversion
def get_instance(self, classid = "Main", use_cache = TRUE):
""" Either get the cached logger instance or create a new one
Note that this is safe, even if you have your target set to sys.stdout
or sys.stderr
"""
cache = Logger.cache
if (type(classid) == ClassType):
classid = classid.__name__
elif (type(classid) == InstanceType):
classid = classid.__class__.__name__
# classid has to be lowercase, because the ConfigParser returns sections lowercase
classid = lower(classid)
if ((cache.has_key(classid)) and (use_cache == TRUE)):
cat = Logger.cache[classid]
else:
instance = Logger.instance
# test for targets which won't deep copy
targets = instance.__Logger_targets
deepcopyable = TRUE
for i in range(len(targets)):
if (type(targets[i]) == FileType):
deepcopyable = FALSE
if (deepcopyable == FALSE):
# swap the non-copyable target out for a moment
del instance.__Logger_targets
cat = copy.deepcopy(instance)
instance.__Logger_targets = targets
cat.__Logger_targets = targets
else:
cat = copy.deepcopy(instance)
cat.__Logger_classname = classid
# new categories have their own private Nested Diagnostic Contexts
self.__Logger_ndc = []
self.__Logger_classid = classid
cat.debug("Class %s instantiated" % classid)
if (use_cache == TRUE):
cache[classid] = cat
return cat
Вы пробовали с помощью '2to3' [инструмент преобразования] (http://docs.python.org/2/library/2to3.html) – Kalyan02
Вы можете сделать это автоматически HTTP: //docs.python.org/3/library/2to3.html – uKolka
Это ужасный код. Вы должны переписать его правильно в Python3 –