@python_beginnersЭта группа больше не существует

Страница 1001 из 1885
Max
26.12.2016
20:20:08
Можно пример, когда их больше одного?
` def __init__(self, token, threaded=True, skip_pending=False): """ :param token: bot API token :return: Telebot object. """ self.token = token self.update_listener = [] self.skip_pending = skip_pending `

Denis
26.12.2016
20:20:23
Селф же есть ссылка на объект
Селф - название первого аргумента методов. Теоретически туда можно передать что угодно

Max
26.12.2016
20:20:28
один в аргументе, остальные в теле класса ниже

Google
Max
26.12.2016
20:20:59
т.е. селфом может быть любой объект потом, который мы захотим сделать?

и это как болванка, указывающая что у этого объекта будут такие поля

так?

Denis
26.12.2016
20:21:17
В теории да, на практике обычно нет

При нормальном вызове туда передается сам экземпляр

Max
26.12.2016
20:21:31
бля (

экзэмпляр - объект(инстанс) в смысле?

Denis
26.12.2016
20:21:47
Ну да

Max
26.12.2016
20:22:19
Denis
26.12.2016
20:22:29
В первый аргумент метода

Его не обязательно называть self вообще, это просто соглашение такое

Max
26.12.2016
20:23:01
я понимаю про соглашение

ну т.е. мы вызываем класс и первым аргументом передаем туда объект, который хотим создать. И дальше автоматически создается объект со всеми полями, которые есть как селф в классе

Google
Max
26.12.2016
20:23:52
так?

Denis
26.12.2016
20:23:58
Когда ты пишешь a.method(1, 2, 3), это преобразуется в type(a).method(a, 1, 2, 3), грубо говоря

На самом деле там все немного сложнее, но тебе это пока не надо

Если мы просто вызываем класс, вызывается конструктор, то есть __new__ и __init__

__new__ используется реже,а __init__ инициализирует объект

Кротобедонтий
26.12.2016
20:26:00
И селф при нормальном вызове и есть ссылка на себя

Max
26.12.2016
20:26:33
Когда ты пишешь a.method(1, 2, 3), это преобразуется в type(a).method(a, 1, 2, 3), грубо говоря
type(a) в этом случае - класс, а метод - его функция? и объект, который мы создаем тут 1

так?

Denis
26.12.2016
20:26:41
Да

Max
26.12.2016
20:27:12
а "а" в этом случае что?

Denis
26.12.2016
20:27:31
Объект, для которого вызывается функция

Max
26.12.2016
20:27:50
а 1 тогда что, если объект - а?

Кротобедонтий
26.12.2016
20:27:55
Class a: pass

Denis
26.12.2016
20:28:02
1 — параметр

Zart
26.12.2016
20:28:18
в конечном итоге, объект - это блок памяти. всего навсего

Denis
26.12.2016
20:28:39
>>> class C: ... def f(self, x, y, z): ... print(self, x, y, z) ... >>> a = C() >>> a.f(1, 2, 3) <__main__.C object at 0x7fa670e3e748> 1 2 3

>>> C.f(a, 1, 2, 3) <__main__.C object at 0x7fa670e3e748> 1 2 3

Max
26.12.2016
20:29:07
объект - это экзэмпляр класса. Класс - просто удобный способ группирования кусков кода, которые будут использоваться вместе. Это я понимаю

Zart
26.12.2016
20:29:48
классы - это способ группировки данных с методами, определенными на них

Denis
26.12.2016
20:30:07
>>> C.f.__get__(a) <bound method C.f of <__main__.C object at 0x7fa670e3e748>> >>> C.f.__get__(a)(1, 2, 3) <__main__.C object at 0x7fa670e3e748> 1 2 3

Google
Zart
26.12.2016
20:30:40
сруливание в дебри дескрипторов не совсем помогает

Denis
26.12.2016
20:30:55
Возможно

Max
26.12.2016
20:34:17
пытаюсь переварить, сча

Zart
26.12.2016
20:35:52
ну есть у тебя некие данные в процедурном/структурном программировании задача бьется на блоки, каждый из которых оперирует над данными ооп идёт дальше и переносит операции к данным, превращая операции над данными в сами данные (методы/свойства)

это позволяет думать над архитектурой программ как ансамбле взаимодействущих сущностей

вокруг этого базового концепта накручено дохера всего - наследования, полиморфизмы, множественные наследования, интерфейсы, видимости, свойства, статические/классовые методы, абстрактные классы и т.д.

Johnnie
26.12.2016
20:40:39
def filter_list(l): return [i for i in l if isinstance(i, int)]

Zart
26.12.2016
20:40:49
те же ОРМы к базам - это по сути тот же концепт вместо того чтобы оперировать базовыми операциями вида "скачай кусок таблицы, отфильтрованной по таким-то операндам" ОРМы трансформируют записи в базе в объекты в памяти, заменяя на операции вида "дай мне набор объектов, отвечающий таким-то критериям"

Johnnie
26.12.2016
20:40:49
как вот это можно записать с помощью filter?

Zart
26.12.2016
20:40:59
лямбдой

filter(lambda x:isinstance(x, int), l)

Johnnie
26.12.2016
20:41:45
return list(filter(lambda i: isinstance(i, int), l))

так работает, спасибо

Zart
26.12.2016
20:42:17
но зачем?

Denis
26.12.2016
20:42:17
filter(int.__instancecheck__, l)

Johnnie
26.12.2016
20:42:41
но зачем?
я просто обычно всегда пишу компрехеншены эти)

думаю пора вкурить как работают map reduce filter и иже с ними)

Google
Max
26.12.2016
20:43:10
читал и раньше, но вкурил только вчера

Johnnie
26.12.2016
20:43:16
но зачем?
а что быстрее?

или как проверить?

Zart
26.12.2016
20:43:27
в питоне даже числа - объекты отчего матан в нем медленный как пиздец

Max
26.12.2016
20:43:48
хорошо быть тупым и не париться о скорости матана

наслаждаюсь этим состоянием пока могу

Zart
26.12.2016
20:44:29
я просто обычно всегда пишу компрехеншены эти)
а что за задачи такие, что нужно вечно проверять типы?

Admin
ERROR: S client not available

Johnnie
26.12.2016
20:44:45
да я тут открыл https://www.codewars.com

In this kata you will create a function that takes a list of non-negative integers and strings and returns a new list with the strings filtered out. Example filter_list([1,2,'a','b']) == [1,2] filter_list([1,'a','b',0,15]) == [1,0,15] filter_list([1,2,'aasf','1','123',123]) == [1,2,123]

ape364@pbnb ~> python3 -m timeit "[i for i in [1, 2, 3, 4] if isinstance(i, int)]" 1000000 loops, best of 3: 1.02 usec per loop

чето ваще не очень

Denis
26.12.2016
20:47:05
Хотя фильтр без листа наверно бессмысленно мерить

Johnnie
26.12.2016
20:48:07
с твоего скрина мне больше нравится 3 вариант

хммм

я думал эти фильтры мапы и редьюсы наоборот быстрые шопездец

а нет оказалось

Zart
26.12.2016
20:50:27
там есть нюансы

Johnnie
26.12.2016
20:50:39
плохой пример попался?

Zart
26.12.2016
20:50:43
компрехеншены обычно выигрывают и по читабельности и по скорости

Google
Denis
26.12.2016
20:50:44
__instancecheck__ чот медленный

Zart
26.12.2016
20:50:58
__instancecheck__ чот медленный
конечно. он же сканирует мро

Denis
26.12.2016
20:51:27
Там разве совпадение типов не закостылено?

Zart
26.12.2016
20:51:54
может и есть оптимизации

Max
26.12.2016
21:10:35
Короче я кажется понял про селф

Let's say you have a class ClassA which contains a method methodA defined as: def methodA(self, arg1, arg2): # do something and ObjectA is an instance of this class. Now when ObjectA.methodA(arg1, arg2) is called, python internally converts it for you as: ClassA.methodA(ObjectA, arg1, arg2) The self variable refers to the object itself. вот это еще неск раз прочел и понял

`def __init__(self, token, threaded=True, skip_pending=False): """ :param token: bot API token :return: Telebot object. """ self.token = token self.update_listener = [] self.skip_pending = skip_pending `

но вот в этом куске тогда получается что то, что прописано в теле класса как self.token станет например objectA.token когда мы сделаем objectA как экзэмпляр?

Denis
26.12.2016
21:12:14
Да ето так

Max
26.12.2016
21:12:20
ну и заебись

въехал кажется

спасибо

Роман
26.12.2016
21:24:33
въехал кажется
https://habrahabr.ru/post/140581/

Denis
26.12.2016
22:02:19
Не очень

Max
26.12.2016
22:03:31
https://habrahabr.ru/post/140581/
интересно. но я читаю код сейчас, а не пишу :)

Роман
26.12.2016
22:04:25
да тут просто в соседнем чате обсуждали, тема холиварная какая-то )

Страница 1001 из 1885

Эта группа больше не существует Эта группа больше не существует