Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 20, 2010 08:36:34

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Как возникает результат str(obj)?

Возьмем код

class Ta:
pass

print str(Ta)
<class __main__.Ta at 0x01CDAF30>
Т.е. по типу можно узнать адрес и название типа. Но по самому объекту классу не понятно как добраться до этой информации.
В какую сторону копать? Как возникают результаты repr(obj) по умолчанию?

ps
мне это надо чтобы по объекту ctypes.Structure сгенерировать текст интерфейса для других языков.
Например
class Tx(Structure):
_fields_ = [("x", c_int),("y", c_int),("z",c_float*5)]
def __init__(self):
pass
typ=Tx
Если в обекте hasattr(typ,'_fields_') тогда считаю структурой
Если hasattr(typ,“_length_”) то это массив длины typ._length_ и типа typ._type_
ну и так далее. Но пока не нашел способа достать ‘Tx’ кроме грубого
def ClassName(typ):
"""по объекту классу возвращаем его символьное имя"""
res=re.search("\.(.+)'",str(typ))
if res:
return res.group(1)
else:
raise ....



Офлайн

#2 Ноя. 20, 2010 09:15:06

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

Как возникает результат str(obj)?

Ta.__name__
Ta.__module__

id(Ta)
hex(id(Ta))



Офлайн

#3 Ноя. 20, 2010 09:22:02

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Как возникает результат str(obj)?

Ок большое спасибо. То что надо.
Правда возник другой вопрос.
У меня python 2.6.6
Выполняю

dir(Ta)
['__doc__', '__module__']
Почему видны не все объекты те не виден __name__
Точнее виден __module__ но не виден __name__ он чем-то хуже?



Отредактировано (Ноя. 20, 2010 09:32:14)

Офлайн

#4 Ноя. 20, 2010 10:41:45

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Как возникает результат str(obj)?

Во первых, наследуйтесь от object.
Во вторых - так получилось :)
__bases__ и __name__ обрабатываются хардкодом в classobject.c. Поэтому они не похожи на обычные атрибуты и не попадают в dir.
http://docs.python.org/reference/datamodel.html - полный список того, что бывает у разных питоновских объектов



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version