2015-03-06 3 views
0

Я не решаюсь задавать этот вопрос, но моя голова не может обойти использование class, __init__() и str. Надеясь, что кто-то будет достаточно терпелив, чтобы ответить, что, вероятно, очень глупый вопрос. я написал следующее, чтобы проверить мое понимание (= 0)»Изменение значений переменных Python, объявленных в __init__

class Test(): 
    def __init__(self,var1,var2): 
     self.__var1 = var1 
     self.__var2 = var2 
    def change_var1(self): 
     self.__var1 
     self.__var1 =2*self.__var1 
     return self.__var1, self.__var2 
    def change_var2(self): 
     self.__var2 
     self.__var2 = self.__var2*2 
     return self.__var1, self.__var2 
    def __repr__(self): 
     return "var1 is {}, and var 2 = {}".format(self.__var1, self.__var2) 

t = Test(4,"Bye") 
print(t.change_var1) 
print(t.change_var2) 

я не могу получить переменные объявленные в инициализации быть изменен последующими функциями. Я предполагаю, что я использовал класс, INIT, str__ неправильно ответ на работы, что я выше:.

<bound method Test.change_var1 of var1 is 4, and var 2 = Bye> 
<bound method Test.change_var2 of var1 is 4, and var 2 = Bye> 

Благодарен за любую помощь, нажмите на сайт, который будет пройти через кирпичную стену моего ума !!

+0

Только совет: первая строка под каждой функцией 'change_var()' не нужна. Полезна только строка, назначающая переменную. – tenwest

ответ

0

Когда вы print(t.change_var1), вы не вызоваchange_var1 function, вы просто ссылки его. Его не называют, поэтому он фактически ничего не делает.

Для вызова вам нужно добавить скобки: «Что я делаю неправильно»

print(t.change_var1()) 
print(t.change_var2()) 
+0

Спасибо за это. Тем не менее, у меня все еще есть проблема. Если я сделаю так, как вы говорите, напечатайте (t.change_var1()) и напечатайте (t.change_var2()), а затем добавьте print (t), я верну свою строку «var1 is 8, а var 2 = ByeBye». Но если я использую только print (t), я возвращаюсь «var1 is 4, а var 2 = Bye». Не могли бы вы объяснить, почему вызов метода класса не меняет переменные? Если я попытаюсь выполнить печать (t()), это даст мне TypeError: объект «Test» не может быть вызван. Я очень плотный !!! – user1478335

+0

вы можете получить ByeBye только в том случае, если вы сначала вызываете 't.change_var2()'. вызов 'print (t)' без изменения переменной даст вам только Bye. Когда вы говорите «вызов метода класса», вы имеете в виду «t = Test (4,« Bye »)'? Это вызовет только '__init __()' – tenwest

+0

Я понял ... Я думаю. Спасибо за вашу помощь. – user1478335

0

Я собираюсь угадать вопрос есть. У вас есть правильные понятия, но я считаю, что обзор Python syntax в порядке.

Если посмотреть на двух примерах там, вы увидите, что один вызовы функция называется fib с помощью скобку, например, >>>fib(1000), но может ссылаться на функцию непосредственно, просто введя >>>fib. Попробуйте удалить print(), окружающий эти две последние строки, и вы получите тот же результат. Добавьте круглые скобки, и вы станете золотыми.

+0

Спасибо за это. Все еще немного запутано, как вы увидите из моего комментария к @salparadise – user1478335

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