Aleksandr🇷🇺
iddqmeоw
Нужно преписать метод pop() класса deque так, чтобы он делал тоже самое, но перед этим выполнял мой код... На скрине моя неудачная попытка и дефолтный метод pop(). Никак не врублюсь как это сделать(
Andrey
Andrey
топовые каналы на фриноде
Aleksandr🇷🇺
ну как же, еще зимой на линуксе около 5к было
Aleksandr🇷🇺
ну лан, все рвно не перейдет нитко с телеги в ирк
iddqmeоw
iddqmeоw
Artêmio
он реализован на Си
Artêmio
Vladislav
Доброе утро.
А кто-нибудь знает, как в pdb понаставлять новых линий ?
(просто сейчас когда я жму enter - оно вместо того чтобы поставить новую линию, повторяет вывод предыдущей команды. А мне просто для наглядности нужно оступы ставить)
iddqmeоw
Dmytro
Tigran
Dmytro
Language:
py3
Source:
ip = '127.0.0.1'
lit = [ip]
def is_list_valid(func):
def check_valid():
if len(lit)<50:
print('no valid')
func()
return check_valid
@is_list_valid
def my_func():
print('my func')
my_func()
Result:
no valid
my func
Dmytro
@pipinstallbrain вы это имели ввиду?
Dmytro
Aragaer
только **kwargs
iddqmeоw
iddqmeоw
iddqmeоw
Tigran
Tigran
С каких пор пичарм здесь власть?
Tigran
хотя в popleft и правда нет смысла в i
iddqmeоw
Tigran
Ну сойдёт
Tigran
Даже лучше наследования)
Tigran
Так ты даже не запустил код с super, как я понимаю
Tigran
Не похоже, чтобы ты очень хотел разобраться
iddqmeоw
ой, не тот скрин сорри
iddqmeоw
iddqmeоw
если так:
def pop(self, i: int = -1):
self._is_list_valid()
print('my code')
return super().pop()
IndexError: pop from an empty deque
SetazeR
SetazeR
а ты данные в свой прокси лист пихать для начала не пробовал?
SetazeR
а потом пытаться что-то извлекать
iddqmeоw
вмысле? я запихиваю... он не пустой, даже принт сделал(
SetazeR
iddqmeоw
SetazeR
ну-ка скинь код, у себя запущу
SetazeR
что-то тут не чисто
iddqmeоw
from collections import deque
class Proxy(deque):
def __init__(self):
super().__init__()
self.proxy_list = deque()
def _get_fresh_proxies(self):
# download fresh proxies
for x in range(10):
self.proxy_list.append('proxy' + str(x))
print(self.proxy_list)
def _is_list_valid(self):
if len(self.proxy_list) < 3:
self._get_fresh_proxies()
def pop(self, i: int = -1):
self._is_list_valid()
print('my code')
return super().pop()
if __name__ == '__main__':
proxy = Proxy()
print(proxy.pop())
print(proxy.proxy_list)
SetazeR
меня здесь дико смущает super().pop()
Andrey
простите, что влезаю, а зачем переопределять pop? почему бы не сделать свой класс poop и не наследовать pop, добавив новый функционал?
iddqmeоw
рекурсия будет
SetazeR
почему не self.proxy_list.pop()
SetazeR
вот
iddqmeоw
SetazeR
просто непонятно в данном случае к чему применяется этот самый pop()
iddqmeоw
вот такой вариант нормальный? или стоит с наследованием повозиться?
SetazeR
ты как бэ не знаешь что делает калсс deque в своём ините, где он хранит собстно данные, а пытаешься вызывать метод pop класса deque
SetazeR
что это должно вернуть?
SetazeR
если твои данные в proxy_list, откуда deque должна знать что надо pop'ать именно оттуда?
SetazeR
SetazeR
выдаётся ровно такая же ошибка как у тебя
Alex
SetazeR
кстати да
SetazeR
везде я так полагаю можно убрать проксилист
SetazeR
from collections import deque
class Proxy(deque):
def _get_fresh_proxies(self):
# download fresh proxies
for x in range(10):
self.append('proxy' + str(x))
print(self)
def _is_list_valid(self):
if len(self) < 3:
self._get_fresh_proxies()
def pop(self):
self._is_list_valid()
print('my code')
return super().pop()
if __name__ == '__main__':
proxy = Proxy()
print(proxy.pop())
print(proxy)
Alex
Унаследуйся од дек и переопредели метод.
Alex
SetazeR
о как, у deque нету аргументов у pop'а вообще
SetazeR
как и у popleft
SetazeR
собстно в этом суть deque
SetazeR
ну как видишь ты давал мне код без конфига, поэтому от инита я избавился ибо он не требует переопределения
SetazeR
я тебя просто ситуация получалась
SetazeR
ты делаешь экземпляр прокси, который по сути deque
SetazeR
и потом в него ещё пихаешь deque атрибутом
SetazeR
сам работаешь с этим атрибутным deque, а pop'ать пытаешься из проксяшного