2013-06-19 4 views
-4

Я новичок в 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 
+7

Вы пробовали с помощью '2to3' [инструмент преобразования] (http://docs.python.org/2/library/2to3.html) – Kalyan02

+1

Вы можете сделать это автоматически HTTP: //docs.python.org/3/library/2to3.html – uKolka

+1

Это ужасный код. Вы должны переписать его правильно в Python3 –

ответ

1

Откройте терминал и введите в 2to3 nameofpythonfile.py и файл питона будут автоматически преобразованы.

Как открыть терминал

Windows,: поиск ЦМД

* Никс: Тип ctrl-alt-T

+0

2to3 не конвертирует ClassType или InstanceType – Greg

1
if (type(classid) == ClassType): 
    classid = classid.__name__ 
elif (type(classid) == InstanceType): 
    classid = classid.__class__.__name__ 

примерно эквивалентно

if isinstance(classid, type): 
    classid = classid.__name__ 
else: 
    classid = classid.__class__.__name__ 

2to3 должен охватывать остальные