Найти - Пользователи
Полная версия: self = pickle.loads(...)
Начало » Python для экспертов » self = pickle.loads(...)
1
nerezus
У меня такой код работает:

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
ZZZ
Я не понял проблемы…
    pickle.load(file(self.dump_filename))
А конструкция “self = …” ИМХО бессмыслена.
nerezus
Ну не работает просто 2ой метод. Хотелось бы именно сделать метод для замены себя(self) в классе, а нен статический метод
ZAN
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
nerezus
Понял, жаль (
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB