александр
иначе я не смогу тебе помочь
Beryl
ок
17
Да
Нет*
александр
окей. Смотри
Pavel
тебе миксины правильно подсказали
еще можешь сделать свою кор-модель с нужным функционалом, унаследованную от джангиной модели, и наследоваться от нее
александр
есть такая штука, называется ipv4. Это грубо говоря интернет адреса
Evgen
У меня есть несколько объектов одного класса. Они считаются одинаковыми, если self.id == other.id. Теперь мне нужно узнать, есть ли нужный мне объект в списке, т.е. foo1 in [foo2, foo3, foo1like], притом foo1 == foo1like, но строчка кода выше возвращает мне False. Что не так?
александр
их очень мало. На всех их не хватит
александр
поэтому люди придумали штуку - NAT
Evgen
Или придётся писать своё?
Pavel
А можно на это повлиять?
переопределить `__contains__`
александр
NAT позволяет пользоваться интернетом всем юзерам в условной домашней сети, при этом ipv4 (белый) адрес у них один
Pavel
но списку это ты сделать не сможешь
Evgen
но списку это ты сделать не сможешь
Т.е. только писать свой поиск, верно?
Evgen
Океей
александр
но NAT накладывает свои ограничения, завязанные на принципе работы этого самого NAT
александр
из-за NAT ты не можешь связать сокеты с разных сетей, не прибегая к хитростям
Evgen
Ещё один вопрос. Когда я переопределяю __eq__, если типы несовместимы (т.е. что-то вроде int() == list()), лучше возвращать False или NotImplemented?
александр
(белый ipv4 - уникальный ipv4, видный в интернете)
александр
как можно "пробить" NAT ? используй hamachi
александр
как бесплатный вариант
17
Спасибо
александр
ага
17
Посмотрю
Pavel
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
александр
по этому принципу играют в пиратки по сети
александр
Посмотрю
александр
тот же minecraft
Evgen
__contains__ всё же по == проверяет, кажется
Так, а почему у меня тогда не работает? 🤔
Pavel
Так, а почему у меня тогда не работает? 🤔
а как ты своему классу __eq__ определил?
александр
не то сообщ
Evgen
а как ты своему классу __eq__ определил?
if isinstance(other, self.__class__): return self.id == other.id return False
александр
__ contains __ это in
Evgen
__ contains __ это in
Ну да Нам интересна реализация
Pavel
__ contains __ это in
наоборот только
александр
ну да
александр
александр
параметры self, other
Pavel
не self.__class__, а type(self)
Pavel
А разница?
никакой =)
Evgen
🌚
александр
Фак, хочу на фриланс пробиться с работы
александр
я на неё не так давно устроился
александр
но это пздц
александр
СКУУУКАААААА
александр
пытался, не выходит :(
александр
буду ещё пытаться
александр
не бывает неприступных крепостей
александр
я на это надеюсь
Pavel
Ну да Нам интересна реализация
а просто равенство то у тебя вообще отрабатывает?
александр
дайте код
Pavel
Да должно 😅
покажи код целиком что ли
александр
и чо не работает
Evgen
Ухх
александр
скучно сцук
Evgen
Ща я ещё немного подебажу, потому что собственный поиск тоже не хочет работать
Evgen
Так стоп
Evgen
Кажется, у меня id где-то str, а где-то int
Evgen
Да, в этом и была проблема Всем спасибо, кто помогал)
Evgen
Странно то, что в определённом месте равенство работало, а в другом — нет
Pavel
хм. зато теперь я точно знаю, что __contains__ листа проверяет на равенство! https://github.com/python/cpython/blob/master/Objects/listobject.c#L445
Эрнест
Не знаю куда задать, то ли в бегинерс, то ли сюда. Вопрос: зачем в методе вызывается super, разве нельзя без него? def dispatch(self, request, *args, **kwargs): self.user_id = request.user.pk return super().dispatch(request, *args, **kwargs
Эрнест
а если вызвать то произойдет?
17
Почему так происходит после компиляции в exe?
Evgen
ну, ссзб =)
¯\_(ツ)_/¯