Форум сайта python.su
Недавно начал учить питон, не совсем понимаю, как оформлять класс и его методы. Написал класс, содержащий структуру словаря для записи в базу, функции ввода и вывода(чисто формальный вывод, пока без записи в файл или в список, но показывающий, что и где лежит), необходимо мнение по оформлению кода и реализации, в частности меня интересует, правильно ли я использую self, или же злоупотребляю.
Пример кода:
class human: def __init__(self): self.d = {'name': {'first': '', 'last': ''}, 'age': '', 'adress': {'home': '', 'street': '', 'town': ''} } self.f = list() def setData(self): self.d['name']['first'] = input('Введите имя: ') self.d['name']['last'] = input('Введите фамилию: ') self.d['age'] = input('Введите возраст: ') self.f = input('Введите адрес: ') # в формате <город улица дом> через пробел self.f = self.f.split(' ') self.d['adress']['town'] = self.f[0] self.d['adress']['street'] = self.f[1] self.d['adress']['home'] = self.f[2] return 0 def getData(self): print(self.d.keys()) print(self.d.values()) newHuman = human() newHuman.setData() newHuman.getData()
Офлайн
Зачем создавать словари в классе? Делай так:
class human: def __init__(self): self.first_name = "" self.last_name = "" self.age = 0 self.adress = {'home': '', 'street': '', 'town': ''} def setAge(self, age): self.age=age newHuman = human() newHuman.setAge(input('Введите возраст: '))
Отредактировано Rodegast (Июль 22, 2015 14:37:02)
Онлайн
.
Отредактировано J.R. (Фев. 27, 2016 15:54:42)
Офлайн
RodegastВозможно, так даже и лучше, просто не привык к не жесткому заданию класса)
Зачем создавать словари в классе? Делай так:
J.R.За пример ввода данных и всей структуры огромное спасибо)
Офлайн
J.R.Если класс расчитан на хранение информации, то вводить он ничего не должен. (Методы должны быть чистыми функциями.)
Как-то так может быть:
Отредактировано py.user.next (Июль 23, 2015 00:55:51)
Офлайн
.
Отредактировано J.R. (Фев. 27, 2016 15:55:32)
Офлайн
J.R.Что мешает вообще не писать там ввод?
наследуем, и переписываем дандеринит, с учётом источника данных, при этом сохраняя структуру данных.
>>> class Human: ... def __init__(self, name, lastname): ... self.name = name ... self.lastname = lastname ... def __repr__(self): ... return 'H({}, {})'.format(self.name, self.lastname) ... >>> def human_from_string(s): ... return Human(*s.split(None, 1)) ... >>> def human_from_input(): ... name = input('Name: ') ... lastname = input('Lastname: ') ... return Human(name, lastname) ... >>> >>> h1 = human_from_string('John Doe') >>> h2 = human_from_input() Name: Jane Lastname: Roe >>> h1, h2 (H(John, Doe), H(Jane, Roe)) >>>
Офлайн
.
Отредактировано J.R. (Фев. 27, 2016 15:55:55)
Офлайн
J.R.Выкладывай на https://gist.github.com/
Есть одна задача с рабочим кодом. Код учебный. Нужно покритиковать
Офлайн
.
Отредактировано J.R. (Фев. 27, 2016 15:56:12)
Офлайн