
Set
28.05.2016
09:10:31
Вот что делать

Andrey
28.05.2016
09:28:22

Set
28.05.2016
09:29:56
а что написать для код заполнение данной

Andrey
28.05.2016
09:32:26

Google

Pavel
28.05.2016
09:33:08
django.views.generic.CreateView.
Тебе нужны куски готового кода?

Set
28.05.2016
10:59:15
да
?

Pavel
28.05.2016
11:01:21
Филиал фриланс.ру на канале. Ну тогда проходи в лс, обсудим.

Evgeniy Belyaev
28.05.2016
11:46:06
всем привет
пытаюсь разобратся с внутренностями for-in, вроде всё понятно про __iter__ и next()
но тогда не могу понять почему ничего не возвращается если передать в итератор такой класс:
class MyFileIterator(object):
def __init__(self, filename):
self.filename = filename
try:
file = open(filename, 'r')
except Exception as e:
print(e)
def __iter__(self):
return self
def next(self):
try:
text = file.readline()
return text
except Exception as e:
raise StopIteration()
попытка итерировать не возвращает ничего:
for line in MyFileIterator('C:\\file.txt'):
print(line)

Pavel
28.05.2016
11:48:12
Имя метода next или __next__?

Evgeniy Belyaev
28.05.2016
11:48:40
насколько я понял должно быть именно next()

Zart
28.05.2016
11:49:25
неправильно

Evgeniy Belyaev
28.05.2016
11:49:35
index = ['a', 'b']
iter = index.__iter__()
item = iter.next()
print(item)
вернёт 'a' без проблем

Zart
28.05.2016
11:50:44
в тройке поменяли на __некст__
допиши просто __next__ = next

Evgeniy Belyaev
28.05.2016
11:52:28
def next(self):
__next__ = next
в этом месте?

Google

Zart
28.05.2016
11:52:43
нет

Gleb
28.05.2016
11:53:02
А как вы так пишете?

Zart
28.05.2016
11:53:08
после всего деф

Gleb
28.05.2016
11:53:11
Код в сообщении

Evgeniy Belyaev
28.05.2016
11:53:37
три знака обратные кавычки потом код и тремя закрываем
`

Gleb
28.05.2016
11:53:58
code like this
Прикольно
Спасибо

Zart
28.05.2016
11:54:12
тройные обратные апострофы
а еще питон умеет итерацию по классам без итер/некст

Evgeniy Belyaev
28.05.2016
11:59:25
питон разве при любой for-in не выполняет эти самые __iter__, next() до тех пор пока ни получит StopIteration?

Zart
28.05.2016
12:00:02
есть исключение
для классов без итер, но с __гетитем__ создается специальный итератор

Evgeniy Belyaev
28.05.2016
12:03:12
где-то читал, что __iter__ пришёл на смену этому самому __getitem__ в середине второй версии питона

Zart
28.05.2016
12:04:50
угу, как явный протокол итерации. но оригинальный протокол тоже поддерживается

Pavel
28.05.2016
12:05:32

Zart
28.05.2016
12:06:03
это несложно в общем случае

Google

Pavel
28.05.2016
12:09:21

Evgeniy Belyaev
28.05.2016
12:10:42
если заменить на __next__(self)
возвращает
for line in MyFileIterator('C:\\file.txt'):
TypeError: iter() returned non-iterator of type 'MyFileIterator'

Zart
28.05.2016
12:10:53
а вы всё в заказчиках меряете? меня двойка устраивает

Evgeniy Belyaev
28.05.2016
13:26:04
а если мы в начале класса открываем файл и храним его как member variable
то правильно будет закрывать его именно в методе __del__ ?

Zart
28.05.2016
13:27:34
"начало класса" езьм что? инит?

Evgeniy Belyaev
28.05.2016
13:28:08
class TheClass:
try:
file = open('C:\\file.txt', 'r')
lines = sum(1 for line in file)
except Exception as e:
print (e, e.__doc__)
def __del__(self):
file.close()
if file.closed():
print 'closed'
до методов
переменные который там указываются вроде называются member variables? или я ошибаюсь?

Zart
28.05.2016
13:31:32
ох и бред

[Anonymous]
28.05.2016
13:32:13
Где почитать про ооп с нуля?
Без философии, а как на практике делается
Я так понял, класс - это объединение нескольких функций. Дальше не понял

Evgeniy Belyaev
28.05.2016
13:34:39
ох и бред
содержательно, спасибо
именно этого и ждёшь на канале для начинающих

[Anonymous]
28.05.2016
13:35:59
А тут смогут кратко объяснить? Или там много?

Evgeniy Belyaev
28.05.2016
13:36:07
значит не member, а class var называется, ок

Zart
28.05.2016
13:37:30
несколько неудобно с мобилы, плюс я несколько занят
теперь по коду - смысла выносить закрывание никакого.
file ты во-первых не сохраняешь на селфе, в дел ты его из воздуха дернул
во-вторых слово file уже занято типом, ты его переопределил нафиг
тот sum меня коробит

Evgeniy Belyaev
28.05.2016
13:39:14
PyCharm почему-то не ругается, что file зарезервировано каким-то built-in
если я правильно вообще понял о чём вы

Zart
28.05.2016
13:39:40
открой просто питон и напиши file

Google

Evgeniy Belyaev
28.05.2016
13:41:09

Zart
28.05.2016
13:41:38
прямо там же?

Evgeniy Belyaev
28.05.2016
13:41:56
а как тогда в методах делать операции с содежимым файла если я его закрою сразу как открыл?
или открывать в каждом методе и там же закрывать?

Zart
28.05.2016
13:42:44
смотря какую семантику хосешь

Pavel
28.05.2016
13:43:21
Открыть в __init__, закрыть в __del__

Zart
28.05.2016
13:44:32
нормальные люди делают close() и добавляют его вызов в дел
чтобы можно было завершать явно

Evgeniy Belyaev
28.05.2016
13:46:15
я несколько запутался
сначала закрытие в __del__ было бредом, а теперь так и делают нормальные люди

Pavel
28.05.2016
13:46:16

Zart
28.05.2016
13:46:58
Дел приходится юзать раз у тебя внешний ресурс - файл

Pavel
28.05.2016
13:47:32

Evgeniy Belyaev
28.05.2016
13:48:16
хотелось чтобы он был доступен как общий для всех инстансов класса, поэтому вынес из инит
но я вас понял, спасибо

Zart
28.05.2016
13:48:17
контекст менеджер это очень хорошо, но он им не пользуется уже в ините

Evgeniy Belyaev
28.05.2016
13:49:32
если открывать файл в инит, то разве он не будет открывать каждый раз при создании инстанса?
при создании двух интансов он разве не будет возвращать ошибку доступа, потому что файл уже открыт каким-то предыдущим инстансом?
а если его открыть и отдать как class var, то он будет держать его открытым до тех пор пока существует хоть один инстанс класса позволяя любому инстансу делать с ним нужные операции в рамках методов?
если всё нет, то достаточно простого "нет"
спасибо

[Anonymous]
28.05.2016
15:08:05
У кого время есть?

Andrey
28.05.2016
15:08:39
У кого время есть?
Ни у кого нет, но если есть вопрос, то задавай. Возможно, кто-то поможет.

[Anonymous]
28.05.2016
15:09:17
да я уже спросил. только не понял особо ничего
Где почитать про ооп с нуля?

Google

[Anonymous]
28.05.2016
15:09:46
Без философии, а как на практике делается
А тут смогут кратко объяснить? Или там много?
Где не начнёшь читать - "всё - объекты, бла-бла"

Andrey
28.05.2016
15:10:51

[Anonymous]
28.05.2016
15:11:16
Кратко и лаконично.
создаётся класс, затем(зачем-то) __init__

Andrey
28.05.2016
15:11:47

[Anonymous]
28.05.2016
15:12:03
комментарии хорошие?

Andrey
28.05.2016
15:12:15
Что из 3 принципов тебе не понятно?

[Anonymous]
28.05.2016
15:13:06
мне не принципы, мне практическая часть не понятна. Тот же init

Andrey
28.05.2016
15:13:56

[Anonymous]
28.05.2016
15:13:59
А так, выглядит как краткая запись функций в функциях и обращение к ним

Andrey
28.05.2016
15:14:16

[Anonymous]
28.05.2016
15:16:03
Ну, я ж могу так:
def tools(a):
if a=1:
def tool1:
if a=2
def tool2:
Классы ведь так работают?

Andrey
28.05.2016
15:16:47

Pavel
28.05.2016
15:17:54
Эта группа больше не существует