Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 20, 2008 12:14:33

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

self = pickle.loads(...)

У меня такой код работает:

def load(ifile):
fh = file(ifile, 'r')
content = fh.read()
fh.close()
return content

import cPickle as pickle
class Foo():
...
def load(q):
try:
return pickle.loads(load(q.dump_filename))
except:
return False
А как его сделать примерно таким(предложенный вариант не пашет):
import cPickle as pickle
class Foo():
...
def load(self):
try:
self = pickle.loads(load(self.dump_filename))
return True
except:
return False



Офлайн

#2 Апрель 21, 2008 00:50:04

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

self = pickle.loads(...)

Я не понял проблемы…

    pickle.load(file(self.dump_filename))
А конструкция “self = …” ИМХО бессмыслена.



Отредактировано (Апрель 21, 2008 00:52:01)

Офлайн

#3 Апрель 21, 2008 05:34:56

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

self = pickle.loads(...)

Ну не работает просто 2ой метод. Хотелось бы именно сделать метод для замены себя(self) в классе, а нен статический метод



Офлайн

#4 Апрель 21, 2008 16:42:07

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

self = pickle.loads(...)

nerezus
(предложенный вариант не пашет):
import cPickle as pickle
class Foo():

def load(self):
try:
self = pickle.loads(load(self.dump_filename))
return True
except:
return False
Этот код и не должен работать - в метод передается переменная self (которая принципиально ни чем не отличается от других переменных, передаваемых в качестве параметра), далее идет переопределение этой переменной, и на этом все. Это значит, что созданный объект как был, так и остался, но далее (и только в рамках текущего метода!), под именем self, будет существовать уже другой, вновь созданный объект.
>>> class B(object):
… def do(self):
… print id(self)
… print id(a)
… self = a
… print id(self)

>>> b = B()
>>> b.do()
18349744
18349712
18349712
Без специальных выкрутасов и через-голову-штаны-надеваний, можно только что-нибудь в духе foo = foo.load(), хотя уже в таком случае, очевидно, статический метод более логичен. Но тем не мене:
>>> import datetime
>>> dt = datetime.datetime.now()
>>> print dt
2008-04-21 16:40:43.924000
>>> dt = dt.now()
>>> print dt
2008-04-21 16:40:57.548000



Офлайн

#5 Апрель 21, 2008 19:17:53

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

self = pickle.loads(...)

Понял, жаль (



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version