Причина, по которой вы не можете получить доступ к tc
извне main
, заключается в том, что это локальная переменная. Локальные переменные существуют только внутри функции, которая их создает; как только эта функция вернется, переменные исчезнут навсегда.
Полагаю, предопределение tc вне какого-либо класса или функции. Я не уверен, как бы я сделал это правильно ..
То, что вы спрашиваете, это как изменить tc
с локальной переменной на глобальную переменную.
В общем, это действительно плохая идея. Если вы хотите, чтобы значение сохранялось после выполнения функции, лучшим решением будет return
значение:
def main():
tc = TimeCounter()
tc.startTime()
tc.endTime()
return tc
… а затем попросите абонента сохранить его:
t = main()
Теперь у вас есть переменная с именем t
в той же области, что и вызов main()
, с тем же значением, что и локальная tc
. Итак, в вашем интерактивном сеансе вы можете просто сделать это:
t.process_time_in_seconds
Я дал t
имя, отличное от tc
, просто чтобы было очевидно, что две переменные являются несвязанными именами для одного и того же значения. Если вы хотите использовать одно и то же имя для обоих, это тоже хорошо.
Но иногда - особенно когда делаешь вещи в интерактивной интерпретации - глобальные переменные действительно проще. Всякий раз, когда вы пытаетесь найти глобальную переменную, вам следует остановиться и спросить, есть ли лучший способ сделать это. Но когда этого не происходит, вот как вы это делаете: добавьте оператор global
в начале функции.
def main():
global tc
tc = TimeCounter()
tc.startTime()
tc.endTime()
Теперь вместо создания локальной переменной с именем tc
функция main
создает или изменяет глобальную переменную с именем tc
. Итак, после вызова main()
вы можете получить доступ к этой глобальной переменной:
tc.process_time_in_seconds
В зависимости от того, какие интерактивные материалы вы планируете делать, это может быть так же хорошо, как версия return
и немного проще, или может вызывать ненужные проблемы или ограничения, такие как невозможность вызова main()
дважды и вернуть два разных значения. Если вы не знаете, всегда ошибайтесь, если не используете глобальные переменные. Но когда ты знаешь, что хочешь, иди.