получение пути к классу или пространства имен класса в python, даже если он вложен

В настоящее время я пишу модуль сериализации на Python, который может сериализовать определенные пользователем классы. для этого мне нужно получить полное пространство имен объекта и записать его в файл. Затем я могу использовать эту строку для воссоздания объекта.

например, предположим, что у нас есть следующая структура классов в файле с именем A.py

class B:
    class C:
        pass

теперь с предположением, что my_klass_string - это строка «A :: B: : C "

klasses = my_klass_string.split("::")
if globals().has_key(klasses[0]):   
    klass = globals()[klasses[0]]
else:
    raise TypeError, "No class defined: %s} " % klasses[0]
if len(klasses) > 1:
    for klass_string in klasses:
        if klass.__dict__.has_key(klass_string):
            klass = klass.__dict__[klass_string]
        else:
            raise TypeError, "No class defined: %s} " % klass_string            
klass_obj = klass.__new__(klass)

Я могу создать экземпляр класса C, даже если он находится в классе B в модуле A . приведенный выше код эквивалентен вызов eval (klass_obj = ABC__new __ (ABC))

примечание: Я использую здесь __ new __ () , потому что я воссоздаю сериализованный объект, и я не хочу запускать объект, поскольку я этого не делаю знать, какие параметры принимают методы класса __ init __ . Я хочу создать объект без вызова init , а затем назначить ему атрибуты позже.

любым способом я могу создать объект класса A.B.C из строки. бой, как мне пойти другим путем? как получить строку, описывающую полный путь к классу из экземпляра этого класса, даже если класс вложен?

7
задан Ryex 17 December 2010 в 21:18
поделиться