
Pavel
29.03.2019
19:01:05

Илон
29.03.2019
19:01:11
иначе я не смогу тебе помочь

Remald
29.03.2019
19:01:14
ок

А
29.03.2019
19:01:26

Google

Илон
29.03.2019
19:01:44
окей. Смотри

Pavel
29.03.2019
19:02:06

Илон
29.03.2019
19:02:18
есть такая штука, называется ipv4. Это грубо говоря интернет адреса

Evgen
29.03.2019
19:02:29
У меня есть несколько объектов одного класса. Они считаются одинаковыми, если self.id == other.id. Теперь мне нужно узнать, есть ли нужный мне объект в списке, т.е. foo1 in [foo2, foo3, foo1like], притом foo1 == foo1like, но строчка кода выше возвращает мне False. Что не так?

Илон
29.03.2019
19:02:38
их очень мало. На всех их не хватит
поэтому люди придумали штуку - NAT

А
29.03.2019
19:03:14

Pavel
29.03.2019
19:03:23

Evgen
29.03.2019
19:03:36
Или придётся писать своё?

Pavel
29.03.2019
19:04:17

Evgen
29.03.2019
19:04:28

Илон
29.03.2019
19:04:30
NAT позволяет пользоваться интернетом всем юзерам в условной домашней сети, при этом ipv4 (белый) адрес у них один

Google

Pavel
29.03.2019
19:04:32
но списку это ты сделать не сможешь

Evgen
29.03.2019
19:04:53

Pavel
29.03.2019
19:05:01

Evgen
29.03.2019
19:05:08
Океей

Илон
29.03.2019
19:05:27
но NAT накладывает свои ограничения, завязанные на принципе работы этого самого NAT
из-за NAT ты не можешь связать сокеты с разных сетей, не прибегая к хитростям

Evgen
29.03.2019
19:07:55
Ещё один вопрос. Когда я переопределяю __eq__, если типы несовместимы (т.е. что-то вроде int() == list()), лучше возвращать False или NotImplemented?

Илон
29.03.2019
19:08:14
(белый ipv4 - уникальный ipv4, видный в интернете)
как можно "пробить" NAT ? используй hamachi
как бесплатный вариант

А
29.03.2019
19:09:11
Спасибо

Илон
29.03.2019
19:09:18
ага

А
29.03.2019
19:09:18
Посмотрю

Pavel
29.03.2019
19:10:04

Evgen
29.03.2019
19:10:24

Pavel
29.03.2019
19:10:54
In [5]: class Foo(object):
...: def __init__(self, id):
...: self._id = id
...: def __eq__(self, other):
...: return self._id == other._id if isinstance(other, type(self)) else False
In [9]: Foo(1) == 1
Out[9]: False
In [10]: Foo(1) in [Foo(2), Foo(3)]
Out[10]: False
In [11]: Foo(1) in [Foo(2), Foo(3), Foo(1)]
Out[11]: True

Илон
29.03.2019
19:10:57
по этому принципу играют в пиратки по сети
Посмотрю

Pavel
29.03.2019
19:11:14

Илон
29.03.2019
19:11:21
тот же minecraft

Google

Evgen
29.03.2019
19:11:46

Pavel
29.03.2019
19:12:05

Илон
29.03.2019
19:12:31
не то сообщ

Evgen
29.03.2019
19:12:33

Илон
29.03.2019
19:12:51
__ contains __ это in

Evgen
29.03.2019
19:13:19

Pavel
29.03.2019
19:13:19

Илон
29.03.2019
19:13:31
ну да

Pavel
29.03.2019
19:13:50

Илон
29.03.2019
19:14:03
параметры self, other

Pavel
29.03.2019
19:14:14
не self.__class__, а type(self)

Evgen
29.03.2019
19:14:27

Pavel
29.03.2019
19:14:44

Evgen
29.03.2019
19:14:50
?

Илон
29.03.2019
19:15:40
Фак, хочу на фриланс пробиться с работы
я на неё не так давно устроился
но это пздц
СКУУУКАААААА

Google

Maxim robox
29.03.2019
19:16:13

Илон
29.03.2019
19:16:27
пытался, не выходит :(
буду ещё пытаться
не бывает неприступных крепостей
я на это надеюсь

Pavel
29.03.2019
19:17:15

Evgen
29.03.2019
19:17:40

Илон
29.03.2019
19:17:55
дайте код

Pavel
29.03.2019
19:17:55

Илон
29.03.2019
19:18:03
и чо не работает

Evgen
29.03.2019
19:18:03
Ухх

Илон
29.03.2019
19:18:16
скучно сцук

Evgen
29.03.2019
19:19:02
Ща я ещё немного подебажу, потому что собственный поиск тоже не хочет работать
Так стоп
Кажется, у меня id где-то str, а где-то int
Да, в этом и была проблема
Всем спасибо, кто помогал)
Странно то, что в определённом месте равенство работало, а в другом — нет

Pavel
29.03.2019
19:23:05
хм. зато теперь я точно знаю, что __contains__ листа проверяет на равенство!
https://github.com/python/cpython/blob/master/Objects/listobject.c#L445

iSeven
29.03.2019
19:23:57
Не знаю куда задать, то ли в бегинерс, то ли сюда.
Вопрос: зачем в методе вызывается super, разве нельзя без него?
def dispatch(self, request, *args, **kwargs):
self.user_id = request.user.pk
return super().dispatch(request, *args, **kwargs

Google

Pavel
29.03.2019
19:24:34

iSeven
29.03.2019
19:25:15
а если вызвать то произойдет?

А
29.03.2019
19:25:17

Evgen
29.03.2019
19:25:34

А
29.03.2019
19:25:37
Если включить в .py, то все работает

Pavel
29.03.2019
19:25:52
Не знаю куда задать, то ли в бегинерс, то ли сюда.
Вопрос: зачем в методе вызывается super, разве нельзя без него?
def dispatch(self, request, *args, **kwargs):
self.user_id = request.user.pk
return super().dispatch(request, *args, **kwargs
видимо, dispatch базового класса не делает ничего с user.id.
а чтобы не дублировать остальной его функционал, вызывается функция из базового класса
потому что винда не нужна. а на самом деле ты просто не скормил своему упаковщику (что бы это ни было) нужные либы (как скормить, я не подскажу, потому что понятия не имею)

hachiman
29.03.2019
19:28:27
ну ну КотИк, тебе на гитхаб поиск

А
29.03.2019
19:28:36
Кто подскажет, как скормить??

Pavel
29.03.2019
19:29:05

Илон
29.03.2019
19:29:33
Пасаны, кто живёт в USA ?

iSeven
29.03.2019
19:30:06

Pavel
29.03.2019
19:31:43

Илон
29.03.2019
19:32:46
Через pip

iSeven
29.03.2019
19:39:43

Pavel
29.03.2019
19:40:02
рекомендую прочитать про mro (method resolution order)
это снимет твой текущий вопрос и много других релевантных

iSeven
29.03.2019
19:44:19
class LoginRequiredMixin(AccessMixin):
"""Verify that the current user is authenticated."""
def dispatch(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return self.handle_no_permission()
return super().dispatch(request, *args, **kwargs)
то есть получается, если метод диспатч не описан в миксинеацесс, то он будет вызываться из класса object?