
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
один в аргументе, остальные в теле класса ниже

Denis
26.12.2016
20:20:41

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
так?

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

Кротобедонтий
26.12.2016
20:30:34

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 и иже с ними)

Max
26.12.2016
20:42:53
и что реально все можно передавать как аргумент

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

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

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

Max
26.12.2016
22:03:31

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