2016-02-08 2 views
2

Я просто изучаю классы на Python, и на прошлый день я застрял с приведенным ниже.Beginner Python Classes - изменение значения атрибута с помощью ввода пользователя

Я пытаюсь использовать пользовательский ввод (из функции main()), чтобы изменить значение атрибута в классе.

Я прошел через методы @property и @ name.setter, которые позволяют изменять значение частного атрибута.

Однако я пытаюсь выяснить, как вы можете использовать пользовательский ввод, чтобы изменить значение атрибута, который не является приватным.

Я придумал нижеследующее, но оно, похоже, не работает. Значение атрибута остается неизменным после запуска программы. У вас есть идеи, почему?

class Person(object): 

    def __init__(self, loud, choice = ""): 
     self.loud = loud 
     self.choice = choice 

    def userinput(self): 
     self.choice = input("Choose what you want: ") 
     return self.choice 

    def choiceimpl(self): 
     self.loud == self.choice 

    def main(): 

     john = Person(loud = 100) 

     while True: 

      john.userinput() 

      john.choiceimpl() 

      print(john.choice) 
      print(john.loud) 

    main() 
+0

Привет @IliasP, вы подумали об использовании 'raw_input()' вместо вывода? –

+1

Привет @ AndyK - спасибо за быстрый ответ. На самом деле я сделал то, что предложил TimK ниже, и работает отлично. Еще раз спасибо. – IliasP

ответ

4

В choiceimpl вы используете ==, где вы должны использовать =.

+0

Спасибо TimK. Он работает сейчас. Это было действительно глупо - извините! – IliasP

0

Как указано выше, вы используете сравнение с == вместо =. Также вы возвращаете self.choice в userinput как возвращаемое значение, но никогда не используете его, потому что вы устанавливаете self.choice равным входному.

Более короткий пример:

class Person: 
    def __init__(self, loud): 
     self.loud = loud 
    def set_loud(self): 
     self.loud = input("Choose what you want: ") 
def main(): 
    john = Person(100) 
    while True: 
     john.set_loud() 
     print(john.loud) 
main() 
0

1) Изменение: '==' (оператор сравнения) к '=' (для назначения)

2) Внутри класса: def choiceimpl(self,userInp): self.loud = self.userInp

3) Внешний класс

personA = Person(loud)       # Create object 
userInp = raw_input("Choose what you want: ") # Get user input 
personA.choiceimpl(userInp)     # Call object method 
Смежные вопросы