Найти - Пользователи
Полная версия: Помогите разобраться с классами и функциями
Начало » Python для новичков » Помогите разобраться с классами и функциями
1 2 3
tolko_ne_tak
Позвольте пресоеденится к дисскусии, чтоб не плодить одинаковые темы.
Сейчас тоже пытюсь вникнуть в классы. Начал решать на первый взгляд тривиальную задачу, но мягко говоря застряд :-\
Пока получилось примерно вот что:
'''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, есчо пустой.
Да и общее ощущение что код ка-който ужасно кривой у меня пока получается.
pyuser
Приглядитесь к Вашему методу:
def load(self,filename):
k='/home/funtik/'+str(filename)+'.txt'
f=file(k,'w')
Вы открываете файл на запись, затирая при этом его содержимое. Думаю флаг “r” в данном случае будет более уместен.
tolko_ne_tak
А есчо такой впрос:
И каким способом пользоваться правильно?
f=file('/pathname/')
и
base_data = open('base.txt')
Или же open метод класса file?
Конечно вроде бы глупый вопрос, но для меня это пока не очевидно, поэтому всё же решил спросить.
pyuser
Проще было в справку по 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)).
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