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

LighteR
16.11.2018
10:37:56

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

megapro17
16.11.2018
10:51:49

John
16.11.2018
10:52:01

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

Tishka17
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' ошибка

Евгений
16.11.2018
11:21:15
в формулах перечисление через запятую

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

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.

Tishka17
16.11.2018
11:58:27

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())