Найти - Пользователи
Полная версия: new.classobj зарегистрировать создаваемый класс в модуле
Начало » Python для новичков » new.classobj зарегистрировать создаваемый класс в модуле
1
axe
пусть есть модули main.py и createClass.py

внутри createClass динамически создаётся класс:
resClass = new.classobj("testClassName", (BaseClass,), {} )
модуль createClass импортируется в main

при распечатке print createClass.resClass получаю
<class ‘createClass.testClassName’>
но обратиться к createClass.testClassName нельзя. и в print dir( createClass ) так же нет testClassName.

как зарегистрировать создаваемый класс в модуле (т.е. чтоб регистрировать внутри createClass )?
PooH
Не ручаюсь за правильность и кошерность, но работает
#createClass.py
import new
globals()["testClassName"] = new.classobj("testClassName", (object,), {} )
Cleric
одно замечание, вместо устаревшего new.classobj лучше использовать type:
type("testClassName", (BaseClass,), {} )
crchemist
правильніше певно буде не 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
>>>
PooH
crchemist
правильніше певно буде не globals() а locals()
А какая разница? globals же возвращает словарь уровня модуля:
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).
crchemist
ага, може й нема
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB