Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 10, 2010 21:19:20

tolko_ne_tak
От:
Зарегистрирован: 2010-02-09
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с классами и функциями

Позвольте пресоеденится к дисскусии, чтоб не плодить одинаковые темы.
Сейчас тоже пытюсь вникнуть в классы. Начал решать на первый взгляд тривиальную задачу, но мягко говоря застряд :-\
Пока получилось примерно вот что:

'''This is command line adress book'''
import cPickle as p

class Person:
book={}

def __init__(self,name,tel,adress):
#In this place we initialize new class
self.name=name
self.tel=tel
self.adress=adress
print 'Initialized new value...%s' %self.name
Person.book[name]='Name: "%s"\nTel: "%s"\nAdress: "%s"' %(self.name,self.tel,self.adress)

def show(self,target):
#Intitialize new class(Person) method(show)
print Person.book[target]
def showall(self):
for i in Person.book:
print '>>>',i

def howMany(self):
print 'In my adress book',len(Person.book),'person'

def __del__(self):
print '%s deleted from adress book' %self
del Person.book[self.name]
if len(Person.book) == 0:
print 'Adress book empty.'
else:
print 'In adress book are still %d people left.' % len(Person.book)

def save(self,filename):
k='/home/funtik/'+str(filename)+'.txt'
f=file(k,'w')
p.dump(Person.book,f)
f.close()
def load(self,filename):
k='/home/funtik/'+str(filename)+'.txt'
f=file(k,'w')
new_loc=p.load(f)
new_loc=Person.book
print Person.book
f.close
getstarted=Person(None,None,None)
getstarted.load(input('->'))
Первая проблемма:
Запускаю, заполняю, закрываю, проверяю файл, данные сохранены.
Закрывая, опять запускаю, получаю ошибку(IOE), проверяю - файл пустой. Немогу понять, почему в файл записывается пустой словарь, при старте же невызывятся метод save, пока book, есчо пустой.
Да и общее ощущение что код ка-който ужасно кривой у меня пока получается.



Офлайн

#2 Фев. 11, 2010 02:43:35

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Помогите разобраться с классами и функциями

Приглядитесь к Вашему методу:

def load(self,filename):
k='/home/funtik/'+str(filename)+'.txt'
f=file(k,'w')
Вы открываете файл на запись, затирая при этом его содержимое. Думаю флаг “r” в данном случае будет более уместен.



Офлайн

#3 Фев. 13, 2010 23:05:19

tolko_ne_tak
От:
Зарегистрирован: 2010-02-09
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с классами и функциями

А есчо такой впрос:
И каким способом пользоваться правильно?

f=file('/pathname/')
и
base_data = open('base.txt')
Или же open метод класса file?
Конечно вроде бы глупый вопрос, но для меня это пока не очевидно, поэтому всё же решил спросить.



Отредактировано (Фев. 13, 2010 23:06:11)

Офлайн

#4 Фев. 15, 2010 02:07:55

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Помогите разобраться с классами и функциями

Проще было в справку по Python'у заглянуть :-). И file и open - конструкторы объектов типа file, поэтому правильны оба метода, однако: (цитата из справки) “When opening a file, it’s preferable to use open() instead of invoking this constructor directly. file is more suited to type testing (for example, writing isinstance(f, file)).



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version