@ru_python

Страница 8558 из 9768
Илон
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
Evgen
29.03.2019
19:03:36
Или придётся писать своё?

Pavel
29.03.2019
19:04:17
А можно на это повлиять?
переопределить `__contains__`

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
но списку это ты сделать не сможешь
Т.е. только писать свой поиск, верно?

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
Посмотрю

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
по этому принципу играют в пиратки по сети

Посмотрю

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

Google
Evgen
29.03.2019
19:11:46
__contains__ всё же по == проверяет, кажется
Так, а почему у меня тогда не работает? ?

Pavel
29.03.2019
19:12:05
Так, а почему у меня тогда не работает? ?
а как ты своему классу __eq__ определил?

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

Evgen
29.03.2019
19:12:33
а как ты своему классу __eq__ определил?
if isinstance(other, self.__class__): return self.id == other.id return False

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

Evgen
29.03.2019
19:13:19
__ contains __ это in
Ну да Нам интересна реализация

Pavel
29.03.2019
19:13:19
__ contains __ это in
наоборот только

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

Илон
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
Ну да Нам интересна реализация
а просто равенство то у тебя вообще отрабатывает?

Илон
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
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
Кто подскажет, как скормить??
документация того, чем ты пользуешься для сборки exe, вестимо

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

iSeven
29.03.2019
19:30:06
видимо, dispatch базового класса не делает ничего с user.id. а чтобы не дублировать остальной его функционал, вызывается функция из базового класса
то есть, получается переопределение работает так: я объявляю сигнатуру класса, но исполнение внутренних методов не происходит. затем я пишу свой код. и чтобы функция диспатч делала свой базовый функционал, мне нужно вызвать наследование через класс super()?

Pavel
29.03.2019
19:31:43
то есть, получается переопределение работает так: я объявляю сигнатуру класса, но исполнение внутренних методов не происходит. затем я пишу свой код. и чтобы функция диспатч делала свой базовый функционал, мне нужно вызвать наследование через класс super()?
только не "вызвать наследование", а "вызвать метод суперкласса" а так, всё вроде как правильно понято. при желании можно вообще детально указать, какой именно суперкласс ты хочешь (в случае если их несколько). а так он дернет следующий в цепочке mro

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

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?

Страница 8558 из 9768