Size: a a a

2020 December 01

fs

falamous starstrider in #ctfchat
Rubikoid
например так?)
у обьектов с одним айди разные значения
источник

fs

falamous starstrider in #ctfchat
это как
источник

R

Rubikoid in #ctfchat
falamous starstrider
у обьектов с одним айди разные значения
Где?
источник

v

vient in #ctfchat
Rubikoid
Я думаю, что создается какая-то легковесная функция, которая пихает self в self, и она существует только внутри cpython, в результате чего их айдишник одинаковый
потому что если функция "создаётся", то как у неё может быть такой же ID
источник

R

Rubikoid in #ctfchat
vient
потому что если функция "создаётся", то как у неё может быть такой же ID
Создается одна такая функа на все инстансы?
источник

fs

falamous starstrider in #ctfchat
Rubikoid
Где?
>>> class A:
...     def m(self):
...             pass
...
>>> a, b = A(), A()
>>> a.m == b.m
False
>>> a.m is b.m
False
>>> id(a.m) == id(b.m)
True
источник

v

vient in #ctfchat
а откуда она берёт адрес своего инстанса
источник

R

Rubikoid in #ctfchat
falamous starstrider
>>> class A:
...     def m(self):
...             pass
...
>>> a, b = A(), A()
>>> a.m == b.m
False
>>> a.m is b.m
False
>>> id(a.m) == id(b.m)
True
Потому что == переопределяется, например?
источник

R

Rubikoid in #ctfchat
а id - зависим от интерпретатора, через него нельзя сравнивать объекты
источник

R

Rubikoid in #ctfchat
(через is тоже, тащемтота)
источник

v

vient in #ctfchat
мы не сравнивали объекты нигде
источник

v

vient in #ctfchat
мы проверяем, что это один и тот же объект
источник

v

vient in #ctfchat
а, тут уже кинули пример со сравнением
источник

R

Rubikoid in #ctfchat
vient
а откуда она берёт адрес своего инстанса
Оно точно есть в __self__
Два объекта с одним адресом, но при этом разными объектами в атрибутах, хм
источник

R

Rubikoid in #ctfchat
btw, ещё
In [25]: hash(a.f), hash(b.f)
Out[25]: (19115, 19038)
источник

v

vient in #ctfchat
Rubikoid
Оно точно есть в __self__
Два объекта с одним адресом, но при этом разными объектами в атрибутах, хм
угу, видимо, тут просто врёт (в смысле, не выдаёт реальный адрес) id на привязанные методы, другой вариант не могу себе представить
источник

R

Rubikoid in #ctfchat
Фалам, меня больше удивляет, то что bound метод сам себе не равен
In [26]: a.f == a.f, a.f is a.f
Out[26]: (True, False)

In [27]: a.f == A.f, a.f is A.f
Out[27]: (False, False)

In [28]: A.f == A.f, A.f is A.f
Out[28]: (True, True)
источник

fs

falamous starstrider in #ctfchat
static PyObject *
builtin_id(PyModuleDef *self, PyObject *v)
/*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
{
   PyObject *id = PyLong_FromVoidPtr(v);

   if (id && PySys_Audit("builtins.id", "O", id) < 0) {
       Py_DECREF(id);
       return NULL;
   }

   return id;
}
источник

R

Rubikoid in #ctfchat
vient
угу, видимо, тут просто врёт (в смысле, не выдаёт реальный адрес) id на привязанные методы, другой вариант не могу себе представить
Вероятно
источник

fs

falamous starstrider in #ctfchat
хммм
источник