Найти - Пользователи
Полная версия: Как возникает результат str(obj)?
Начало » Python для новичков » Как возникает результат str(obj)?
1
doza_and
Возьмем код
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 ....
dimabest
Ta.__name__
Ta.__module__

id(Ta)
hex(id(Ta))
doza_and
Ок большое спасибо. То что надо.
Правда возник другой вопрос.
У меня python 2.6.6
Выполняю
dir(Ta)
['__doc__', '__module__']
Почему видны не все объекты те не виден __name__
Точнее виден __module__ но не виден __name__ он чем-то хуже?
Андрей Светлов
Во первых, наследуйтесь от object.
Во вторых - так получилось :)
__bases__ и __name__ обрабатываются хардкодом в classobject.c. Поэтому они не похожи на обычные атрибуты и не попадают в dir.
http://docs.python.org/reference/datamodel.html - полный список того, что бывает у разных питоновских объектов
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