2013-07-23 3 views
0

Я пытаюсь получить Ахольд класса питоной вещи, и я написал этот небольшой скрипт, который принимает ввод данных пользователя:Как напечатать результат метода вне метода

import sys 


class Uttenhaler_setup: 
    Fbol=5.01333e-10 
    c=2.99792458e+8 
    L=1000 
    star_list=[] 
    dusty_models=np.array([]) #array of all the dusty models 
    incoming_stars='' #List of incoming stars 


    def __init__(self): 
     """Initiates the below modules.""" 
     self.star_catalog() 
     self.InputKey() 


    def star_catalog(self): 
     """Imports the star catalog""" 
     try: 
      star_catalog=raw_input('Input pathname of stellar catalog: ') 
      with open(star_catalog) as incoming_stars: 
       for line in incoming_stars.readlines(): 
        x=[item for item in line.split()] 
        self.star_list.append(x) #Appends the individual star-IDs to the empty array star_list. 
      print 'Stars imported successfully.' 
     except IOError: 
      print 'Star import unsuccessful. Check that the star catalog file-path is correct. Program exiting now.' 
      sys.exit() 



if __name__=='__main__': 
    Uttenhaler_setup() 

Я могу» t, похоже, находит правильный синтаксис для печати результатов self.star_list вне моего метода. Просто хочу, чтобы кто-то указал на мои ошибки. Благодарю.

+0

Когда вы говорите 'мой метод', это внутри или вне класса' Uttenhaler_setup'? – cforbish

+0

Позвольте мне еще раз пояснить, как я к этому отношусь ... Это под последней строкой моего кода. За пределами(?). – Matt

ответ

1

Ваша проблема заключается в том, что вы настроили star_list как переменная класса, а не как переменная экземпляра. Если вы объявляете star_list, как self.star_list в вашем методе __init__ вы сможете получить доступ к star_list следующим образом:

tst = Uttenhaler_setup() 
print(tst.star_list) 

Как у вас есть вещи, на данный момент, вы должны получить доступ к star_list с:

print(Uttenhaler_setup.star_list) 

Разница в том, что переменная класса доступна для всех экземпляров класса как общей переменной. Если вы измените значение переменной класса, все экземпляры класса увидят это изменение. Однако переменная экземпляра является локальной для одного экземпляра или экземпляра класса. Когда вы изменяете переменную экземпляра, это изменение является локальным для конкретного экземпляра класса.

Обычно вы хотите, чтобы почти все ваши переменные являлись переменными экземпляра. Используйте переменные класса для таких вещей, как константы, которые должны быть одинаковыми для всех экземпляров вашего класса.

+0

кристально чистый. Благодарю вас @ Jonathan. – Matt

2

Сделайте что-нибудь наподобие my_stars = Uttenhaler_setup(), а затем print my_stars.star_list.

0

Если внутри класса Uttenhaler_setup вы можете:

print 'star_list=%r' % (self.star_list) 

Если вне класса Uttenhaler_setup вы можете:

var = Uttenhaler_setup() 
print 'star_list=%r.' % (var.star_list) 
+0

Ни один из них не работает для меня. – Matt

+0

«Не работает» на самом деле не очень полезно. Что на самом деле происходит? – kindall

+0

Ну для второго варианта я просто получаю повторение своего первого raw_input ... похоже, что это началось. И первый вариант, который говорит мне, что «star_list» не определен. – Matt

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