Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 2, 2008 10:49:40

axe
От:
Зарегистрирован: 2008-08-07
Сообщения: 256
Репутация: +  0  -
Профиль   Отправить e-mail  

new.classobj зарегистрировать создаваемый класс в модуле

пусть есть модули 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 )?



Офлайн

#2 Дек. 2, 2008 11:36:39

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

new.classobj зарегистрировать создаваемый класс в модуле

Не ручаюсь за правильность и кошерность, но работает

#createClass.py
import new
globals()["testClassName"] = new.classobj("testClassName", (object,), {} )



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#3 Дек. 2, 2008 12:25:12

Cleric
От:
Зарегистрирован: 2007-06-26
Сообщения: 87
Репутация: +  0  -
Профиль   Отправить e-mail  

new.classobj зарегистрировать создаваемый класс в модуле

одно замечание, вместо устаревшего new.classobj лучше использовать type:

type("testClassName", (BaseClass,), {} )



Отредактировано (Дек. 2, 2008 12:26:05)

Офлайн

#4 Дек. 7, 2008 23:15:36

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

new.classobj зарегистрировать создаваемый класс в модуле

правильніше певно буде не 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
>>>



Офлайн

#5 Дек. 8, 2008 06:11:21

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

new.classobj зарегистрировать создаваемый класс в модуле

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).



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#6 Дек. 8, 2008 16:44:43

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

new.classobj зарегистрировать создаваемый класс в модуле

ага, може й нема



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version