Dasha
Вопрос был про вызов родительского конструктора...
Всё так, и в дальнейшем про вызов люброй родительской функции через super
Dasha
Вопрос был про вызов родительского конструктора...
А можно пояснить, что значит каждый аргумент? super([type[, object-or-type]]) "type - тип, от которого следует начать поиск объекта-посредника" - как это понимать? Это класс, где следует искать объект? Но класс не является объектом Что тогда подразумевается под объектом?
Dasha
Пытаюсь понять суть полностью
Dasha
Вот тут тоже непонятно: obj-or-type: Если не указан, возвращается несвязанный объект-посредник. Если атрибут является объектом, то будет получен посредник для получения метода объекта, для которого isinstance(obj, type) возвращает True. Если атрибут является типом, то будет получен посредник для получения метод класса, для которого issubclass(subtype, type) возвращает True.
Vitaliy
Пытаюсь понять суть полностью
Понимать полностью не надо. Научись пользоваться.
Dasha
Nikolay Markov
Но всё же - как это всё понимать?
Это ты передаешь параметрами текущий класс и текущий инстанс этого класса
Nikolay Markov
Но это излишне и это убрали
Dasha
Понимать полностью не надо. Научись пользоваться.
Нет, пользоваться - это такое себе Просто знать паттерны мало для хорошей реализации
Nikolay Markov
Нет, пользоваться - это такое себе Просто знать паттерны мало для хорошей реализации
В данном случае это знание тебе ничего не даст, оно устарело
Vitaliy
Нет, пользоваться - это такое себе Просто знать паттерны мало для хорошей реализации
Хорошая реализация не потребует знания, как это устроено
Nikolay Markov
Лучше ответь на вопрос, у какого именно класса super() будет дёргать метод?
Dasha
Это ты передаешь параметрами текущий класс и текущий инстанс этого класса
То есть сам класс (как тип Class) и объект класса (как obj = Class(params) ) ?
Nikolay Markov
Потребует
Тогда пиши на ассемблере
Dasha
Да. Но, повторюсь, это устарело
Это понятно, спасибо! Главное разобраться
Vitaliy
Лучше ответь на вопрос, у какого именно класса super() будет дёргать метод?
От родительского по правилу ромбоидального наследования.
Nikolay Markov
От родительского по правилу ромбоидального наследования.
Это как? И причем тут ромбоидальное наследование?
/
в питоне есть многопоточность?
Nikolay Markov
в питоне есть многопоточность?
Есть, до тех пор, пока она выполняет непитоновый код
Oleksii
pop_data.apply( (lambda x: x.replace('+','').replace(',','')), axis=1, index=['Installs']) Вот почему ругается на : TypeError: ("<lambda>() got an unexpected keyword argument 'index'", 'occurred at index 0')
Nikolay Markov
За крайне редким исключением
Nikolay Markov
Твой кейс - .str
Oleksii
Ну ладно. Буду так)
Nikolay Markov
ну просто apply - это цикл по строчкам с перебором
Nikolay Markov
то есть это убивает всю идею и профит от пандаса вообще - у тебя все операции должны быть векторизованы
Nikolay Markov
если кто-то в пандасе без очень уважительной причины использует apply или циклы - его надо бить на кодревью клавиатурой
Tishka17
А зачем писать опять init если все что он делает это вызывает super()?
это просто пример. вероятно там что-то ещё планировалось
Tishka17
хз
Nikolay Markov
вот именно
Nikolay Markov
потому что не нужно
Tishka17
видимо это на какой-то очень хитрый кейс
Nikolay Markov
а ответ на вопрос выше - super() вызывает не метод родительского класса, а метод следующего класса в цепочке MRO
Nikolay Markov
то есть, по сути, если мы наследуемся от нескольких классов, где в одном из них дергается super(), то он вызовет метод не у своего парента, а у следующего класса в цепочке наследования
Nikolay Markov
это немного ломает мозг, но вообще забавная штука
Michael
можете пояснить прикол? Почему x доступен извне for'a? >>> for x in [1,2,3,4]: pass >>> x 4
Nikolay Markov
он просто становится равен последнему значению в итераторе
Michael
X я не создавал до for'a Я ожидал какую-то систему зоны видимости\доступности
Vitaliy
Это как? И причем тут ромбоидальное наследование?
class A(object): ... class B(A): def __init__(self): print(f'[#] in class B') class C(A): def __init__(self): print(f'[#] in class C') class D(B, C): def __init__(self): print(f'[#] in class D') super().__init__() if __name__ == '__main__': D() > [#] in class D > [#] in class B class A(object): ... class B(A): ... class C(A): def __init__(self): print(f'[#] in class C') class D(B, C): def __init__(self): print(f'[#] in class D') super().__init__() if __name__ == '__main__': D() > [#] in class D > [#] in class C
Michael
Это python way? Явное лучше неявного. Тут неявно создалась переменная х
Vitaliy
Это python way? Явное лучше неявного. Тут неявно создалась переменная х
Поддерживаю. А попробуй заранее определить переменную x
Michael
Поддерживаю. А попробуй заранее определить переменную x
перепишет значение тогда, на последнее из for'a
Andrey
Это python way? Явное лучше неявного. Тут неявно создалась переменная х
В питоне ещё и типизация строгая: >>> True + 1 2
Tishka17
X я не создавал до for'a Я ожидал какую-то систему зоны видимости\доступности
есть в питоне зоны видимости - функции, generator expresision, list comprehension и класс
Nikolay Markov
при условии вызова D().foo(), конечно
Vitaliy
перепишет значение тогда, на последнее из for'a
Да, тоже попробовал сейчас такую штуку. Видимо, не создаётся отдельная область видимости. С lambda тоже прикол есть
Nikolay Markov
В питоне ещё и типизация строгая: >>> True + 1 2
по сравнению с джаваскриптом сильно строже)
Nikolay Markov
Michael
Наследование идет слева направо
Nikolay Markov
хотя, казалось бы, какое отношение C имеет к вызову super() внутри B
Nikolay Markov
Прямое
по умолчанию никакого, но в таком коде начинает иметь
Vitaliy
хотя, казалось бы, какое отношение C имеет к вызову super() внутри B
Ну ведь цепочка наследования берётся по классу D, соответственно для B родитель C
Michael
Дважды
дважды не ванговал.
Michael
а
Nikolay Markov
поэтому у многих рвет крышу
Michael
там первое от init, второе от функции, понял
Dasha
это нужно при множетсвенном налседовании.
то есть так: class A(B, C): super(B).__init__(**kwargs) super(C).__init__(**kwargs) ?
Andrew
Ребятки, пытаюсь с линукса с помощью самбы передать файл на расшареную папку винды, но при попытке коннекта получаю следующий фейлюр: smb.smb_structs.OperationFailure: Failed to store pdf.pdf_.pdf on \\*.*.*.*\Virus: Unable to connect to shared device Код, которым отправляю: smbconn = SMBConnection(usrName, password, 'ATDWorker', '**********', use_ntlm_v2=True, sign_options=0, is_direct_tcp=True) conn = smbconn.connect(ip=remoteIp, port=445,sock_family=2, timeout=30) with open(filename_for_save, 'r') as report_to_send: transfer = smbconn.storeFile(remoteAddress,'\\' + only_name, report_to_send)
Dasha
нет
А как?
Tishka17
хз =)
Tishka17
я внезапно понял, что никогда не заморчивался с множественным наследованием и хз как его нормально юзать