@ru_python

Страница 7061 из 9768
fso
16.11.2018
10:32:46
к сведению, в php это делается очень просто в док-блоках. Мне даже не типизацию тут надо а просто подсказки

fso
16.11.2018
10:38:00
а как?

Google
fso
16.11.2018
10:40:15
или сделать тоже самое, как-то по-правильному, чтобы и методы коллекции наследовались (там всякая разная фильтрация) и типы были ближе к дочернему классу - для коллекции машин, last был машиной, для самолетов - самолетом и тд

Tishka17
16.11.2018
10:40:32
так же в. ините

раз надо переопределить

fso
16.11.2018
10:40:50
а там нет инита

Tishka17
16.11.2018
10:40:56
ну сделай

fso
16.11.2018
10:41:00
и не нужен в принципе

Tishka17
16.11.2018
10:41:01
или прям в классе

тебе надо изменить поведение родительского, это где-то надо написать

вообще, конечно тут бы generic какой-то соорудить

щас подумаю

fso
16.11.2018
10:41:53
ну сделай
вот этого как раз пытаюсь избежать, ибо набор аргументов базового класса довольно часто расширяется, и прописаны они вместе с типами в ините базового класса явно

если скопипащу инит в дочерний класс, то приется все дочерние классы править каждый раз когда добавляется аргумент в инит базового

Google
Tishka17
16.11.2018
10:46:29
так не копипасч

вызывай родительский

только то что меняется переопределяй

fso
16.11.2018
10:47:39
так как self.last оттайпхинтить в дочернем классе без инита?

Tishka17
16.11.2018
10:47:57
ну вызови super же

fso
16.11.2018
10:48:17
так набор аргументов то копипасть нужно будет

Tishka17
16.11.2018
10:48:23
*a, **kwa

fso
16.11.2018
10:48:34
тогда подсказки потеряю

pycharm для дочернего класса не будет подсказывать аргументы базового

прям печаль беда....

Андрей
16.11.2018
10:51:21


Alex
16.11.2018
10:53:10
К вершинам мастерства

fso
16.11.2018
10:53:17
а что удалил? было что-то

ааа..

Tishka17
16.11.2018
10:53:28
from typing import TypeVar, Generic T = TypeVar('T') class Collection(Generic[T]): def __init__(self): self.last: T = None class Car: def drive(self): pass class CarCollection(Collection[Car]): pass

Google
Tishka17
16.11.2018
10:53:34
читаем документацию

все нормально аннотируется

fso
16.11.2018
10:54:08
похоже то, что надо) спасибо, сейчас затестю

да, все супер, спасибо еще раз! pycharm подхватил, подсказочки что надо!

Bogdan
16.11.2018
11:19:29
пишу через openpyxl такую строку '=SUM(C5;E5;G5;I5;K5;M5;O5;Q5;S5;U5)' ругается ексель на формулу, опытным путём выяснил что ему ';' не нравится, кто знает что за фигня

'=SUM(C5:E5' всё ок '=SUM(C5;E5' ошибка

Bogdan
16.11.2018
11:21:50
а сам ексель пишет ; когда формулу вводишь через его редактор формул

или он типо для меня так пишет

Евгений
16.11.2018
11:22:28
а сам ексель пишет ; когда формулу вводишь через его редактор формул
попробуй запятую. если посмотреть в доках - через запятую обычно перечисляют

Bogdan
16.11.2018
11:22:44
да я первый раз столнулся с екселем, а уменя стоит русская версия и она замахала уже меня намахивать

он тебе показывает одно, а на самом деле там другое

Евгений
16.11.2018
11:31:36
а, там же разделители связанные с локалью есть, точна

Artem?
16.11.2018
11:40:59


Alex
16.11.2018
11:41:17
__repr__

эм... стоп. это у тебя метод, может быть его нужно вызвать?

Artem?
16.11.2018
11:45:38
Google
Artem?
16.11.2018
11:45:41
в методах?

Tishka17
16.11.2018
11:46:02
чо

Alex
16.11.2018
11:46:08
вот я тоже не понял

в методах можно, почему нет то?

Tishka17
16.11.2018
11:46:16
методы - это просто функции

Alex
16.11.2018
11:46:21
ну да

Tishka17
16.11.2018
11:46:22
лежащие в классе

такие же функции как обычные

Artem?
16.11.2018
11:46:49


Такое не будет там плохим тоном например?

?? Eugene
16.11.2018
11:47:32
Kozhurnaya mast'

Alex
16.11.2018
11:47:37
плохим тоном является именовать функции и классы не по PEP8

Такое не будет там плохим тоном например?
эм... совершенно нормально возвращать из функции ее результат.

совершенно не нормально писать код не по PEP8

Олег
16.11.2018
11:49:21
Artem?
16.11.2018
11:49:36
Олег
16.11.2018
11:49:53
гугл: "нормы PEP8"?
достаточно pep8

Artem?
16.11.2018
11:50:05
Понял. Сейчас ознакомлюсь

Alex
16.11.2018
11:50:49
https://www.python.org/dev/peps/pep-0008/

Artem?
16.11.2018
11:51:44
Google
Sfy
16.11.2018
11:52:08
Как реализовать интерактивное чтение/запись из/в сокет между двумя машинами?

# Сервер import socket from subprocess import Popen, PIPE p = Popen('bash', stdout=PIPE, stdin=PIPE, shell=True) def pSockCommunicate(in_): (out) = p.communicate(input=in_) return out[0] with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: server = (socket.gethostname(), 5643) sock.bind(server) sock.listen(1) clientsock, addr = sock.accept() print("Got a connection from {}".format(addr)) msg = 'Thank you for connecting' + "\n" clientsock.send(msg.encode('utf-8')) while True: clientsock.send(pSockCommunicate(clientsock.recv(4096)))

Popen.communicate() не даёт интерактивности, он читает до конца stdout/stderr и ждёт завершения процесса.

А я не хочу завершать.

Я хочу общаться между машинами и передавать команды с клиента на сервер.

Нужно что-то вовсе другое для такого использовать?

Схема такая, как я хотел бы: 1. Сервер слушает, клиент подключается. 2. Клиент пишет команду в сокет. 3. Сервер считывает команду из клиентского сокета и через пайпы переводит в stdin шелла. 4. Выводит результат выполнения запроса в шелле обратно в сокет к клиенту. 5. Клиент считывает и выводит полученные данные. Всё зациклено до прерывания.

Я наверное что-то упускаю и не понимаю. Кто может, объясните, куда копать хотя бы, что читать.

LighteR
16.11.2018
11:55:57
бэкдор пишешь, да?

Tishka17
16.11.2018
11:56:44
что такое интерактивное чтение?

и зачем сокет

неинтерактивное чтение из сокета уже сделал?

ух

Sfy
16.11.2018
11:58:19
что такое интерактивное чтение?
Одну команду передаёт, выполняет и перенаправляет вывод. Следующую команду не принимает, потому что p.communicate() ждёт завершения p.

Sfy
16.11.2018
11:58:28
что такое интерактивное чтение?
Некорректно написал. Поправлю.

Tishka17
16.11.2018
11:58:35
зачем тебе communicate

прям бери пайп и делай write

Sfy
16.11.2018
12:01:09
ну и пиши напрямую в пайпы
Ничего не выводит на клиенте после направления команды. import socket from subprocess import Popen, PIPE p = Popen('bash', stdout=PIPE, stdin=PIPE, shell=True) #def pSockCommunicate(in_): # (out) = p.communicate(input=in_) # return out[0] with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock: server = (socket.gethostname(), 5643) sock.bind(server) sock.listen(1) clientsock, addr = sock.accept() print("Got a connection from {}".format(addr)) msg = 'Thank you for connecting' + "\n" clientsock.send(msg.encode('utf-8')) while True: #(stdout) = p.communicate(input=clientsock.recv(4096)) #clientsock.send(stdout[0]) p.stdin.write(clientsock.recv(4096)) p.stdin.flush() clientsock.send(p.stdout.read())

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