Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 5, 2008 15:06:33

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

форматування стрічки з %

Маю такий код:

>>> class A(object):pass
...
>>> a = A()
>>> a
<__main__.A object at 0xb7cc9e6c>
як можна самому сформувати таку <__main__.A object at 0xb7cc9e6c> стрічку?
>>> '<%s.%s object at ...' % (a.__class__.__module__, a.__class__.__name__)
'<__main__.A object at ...'
Як взяти адресу?
В сішному коді використвується %p . Пітон %p не підтримує
PyString_FromFormat("<security proxied %s.%s instance at %p>",
smodule, sname, object);



Отредактировано (Авг. 5, 2008 15:11:30)

Офлайн

#2 Авг. 5, 2008 15:12:29

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

форматування стрічки з %

def __repr__(self):
return “object at %s” %hex(id(self))



Отредактировано (Авг. 5, 2008 15:13:52)

Офлайн

#3 Авг. 5, 2008 15:16:48

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

форматування стрічки з %

>>> a
<__main__.A object at 0xb7cc9e6c>
>>> '<%s.%s object at %s' % (a.__class__.__module__, a.__class__.__name__, hex(id(a)))
'<__main__.A object at 0xb7cc9e6cL'
>>>
спасибі, вилетіло з голови id. Ще одне питання - як забрати L в кінці?



Офлайн

#4 Авг. 5, 2008 15:20:54

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

форматування стрічки з %

>>> '<%s.%s object at 0x%x' % (a.__class__.__module__, a.__class__.__name__, id(a))
'<__main__.A object at 0xb7cc9e6c'
>>> a
<__main__.A object at 0xb7cc9e6c>



Офлайн

#5 Авг. 5, 2008 15:22:32

cybergrind
От:
Зарегистрирован: 2008-01-21
Сообщения: 201
Репутация: +  0  -
Профиль   Отправить e-mail  

форматування стрічки з %

ага… в продолжение темы:

import weakref
class B():
pass
a = B()
b = weakref.ref(a)
del(a)
print b
где храниться dead? =) сам то я по доброте душевной думаю что это определяеться по тому когда __call__ возвращает None… но мало ли =)



Офлайн

#6 Авг. 5, 2008 16:19:58

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

форматування стрічки з %

static PyObject *
weakref_call(PyWeakReference *self, PyObject *args, PyObject *kw)
{
static char *kwlist[] = {NULL};

if (PyArg_ParseTupleAndKeywords(args, kw, ":__call__", kwlist)) {
PyObject *object = PyWeakref_GET_OBJECT(self);
Py_INCREF(object);
return (object);
}
return NULL;
}
#define PyWeakref_GET_OBJECT(ref) (((PyWeakReference *)(ref))->wr_object)
struct _PyWeakReference {
PyObject_HEAD

/* The object to which this is a weak reference, or Py_None if none.
* Note that this is a stealth reference: wr_object's refcount is
* not incremented to reflect this pointer.
*/
PyObject *wr_object;

/* A callable to invoke when wr_object dies, or NULL if none. */
PyObject *wr_callback;

/* A cache for wr_object's hash code. As usual for hashes, this is -1
* if the hash code isn't known yet.
*/
long hash;

/* If wr_object is weakly referenced, wr_object has a doubly-linked NULL-
* terminated list of weak references to it. These are the list pointers.
* If wr_object goes away, wr_object is set to Py_None, and these pointers
* have no meaning then.
*/
PyWeakReference *wr_prev;
PyWeakReference *wr_next;
};



Отредактировано (Авг. 5, 2008 16:21:44)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version