2013-04-24 8 views
0

Я рассматриваю следующие подходы для класса инициализации:Возвращение переменной против Установка переменной

class Foo(): 
    def __init__(self): 
     self.name = self.get_name() 
    def get_name(self): 
     return raw_input("Name: ") 

class Foo(): 
    def __init__(self): 
     self.name = "" 
     self.get_name() 
    def get_name(self): 
     self.name = raw_input("Name: ") 

class Foo(): 
    def __init__(self): 
     self.name = raw_input("Name: ") 

есть ли практическая причина, чтобы выбрать один над другим?

Если нет, что можно считать наиболее Pythonic?

+11

Я бы не использовал 'raw_input()' внутри объекта, но это только я. Переместите его снаружи и укажите имя при создании объекта. –

+0

Подход №2 по существу такой же, как №1. –

+0

Итак, в основном вы спрашиваете, как лучше всего создать класс Foo? Ну, я думаю, что большинство pythonic будет баром, хотя bas тоже может иметь смысл, если не quux. – georg

ответ

2
  • Если возможно, input() имя за пределами класса и передать его в качестве параметра к его __init__().
  • Если это не вариант, я хотел бы пойти на второй альтернативе
  • Я бы переименовывать get_name() к чему-то вроде query_name() или input_name(). get_name() звучит как геттер (то получает величину name) не как сеттер или процедуру, которая получает данные от пользователя.
+0

Это имеет смысл. Благодаря! – TKC

0

мне не нравится идея делать необработанный ввод в конструкторе, но в конце концов, почему бы и нет ... я предпочел бы:

class Foo(): 
    def __init__(self): 
     self.name = "" 

    def prompt_name(self): 
     self.name = raw_input("Name: ") 

if __name__ == "__main__": 
    aFoo = Foo() 
    aFoo.prompt_name() 
+0

Почему бы и нет? Поскольку логика приложения должна быть отделена от ввода ввода. (Если это возможно.) – Aleph

+1

'get_name' должно возвращать' имя', потому что оно выглядит как _getter_. – soon

+0

+1 скоро, согласитесь, что имя метода не является моим основным выбором ... Исправлено в редактировании :) –

Смежные вопросы