Форум сайта python.su
пусть есть модули main.py и createClass.py
внутри createClass динамически создаётся класс:
resClass = new.classobj("testClassName", (BaseClass,), {} )
<class ‘createClass.testClassName’>но обратиться к createClass.testClassName нельзя. и в print dir( createClass ) так же нет testClassName.
Офлайн
Не ручаюсь за правильность и кошерность, но работает
#createClass.py
import new
globals()["testClassName"] = new.classobj("testClassName", (object,), {} )
Офлайн
одно замечание, вместо устаревшего new.classobj лучше использовать type:
type("testClassName", (BaseClass,), {} )
Отредактировано (Дек. 2, 2008 12:26:05)
Офлайн
правильніше певно буде не globals() а locals()
[crchemist@test ~]$ cat createClass.py
locals()["testClassName"] = type("testClassName", (object,), {} )
[crchemist@test ~]$ python
Python 2.5.2 (r252:60911, Jul 5 2008, 03:54:54)
[GCC 4.3.0 20080428 (Red Hat 4.3.0-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from createClass import testClassName
>>>
Офлайн
crchemistА какая разница? globals же возвращает словарь уровня модуля:
правильніше певно буде не globals() а locals()
Return a dictionary representing the current global symbol table. This is always the dictionary of the current module (inside a function or method, this is the module where it is defined, not the module from which it is called).
Офлайн
ага, може й нема
Офлайн