Найти - Пользователи
Полная версия: форматування стрічки з %
Начало » Python для новичков » форматування стрічки з %
1
crchemist
Маю такий код:
>>> 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);
ZAN
def __repr__(self):
return “object at %s” %hex(id(self))
crchemist
>>> 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 в кінці?
crchemist
>>> '<%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>
cybergrind
ага… в продолжение темы:
import weakref
class B():
pass
a = B()
b = weakref.ref(a)
del(a)
print b
где храниться dead? =) сам то я по доброте душевной думаю что это определяеться по тому когда __call__ возвращает None… но мало ли =)
crchemist
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;
};
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