0

我正在尝试掌握 python 类的东西,并且我编写了这个接受用户输入的小脚本:

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()

我似乎找不到正确的语法来在我的方法之外打印 self.star_list 的结果。只是想找人指出我的错误。谢谢。

4

3 回答 3

2

做类似的事情my_stars = Uttenhaler_setup()然后print my_stars.star_list

于 2013-07-23T05:01:06.823 回答
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)

不同之处在于类变量作为共享变量可供类的所有实例使用。如果您更改类变量的值,该类的所有实例都会看到更改。但是,实例变量对于单个实例或类的实例是本地的。当您更改实例变量时,更改是类的特定实例的本地更改。

通常,您会希望将几乎所有变量都设为实例变量。将类变量用于类的所有实例应该相同的常量之类的东西。

于 2013-07-23T13:19:33.953 回答
0

如果在课堂上Uttenhaler_setup,您可以:

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

如果在课堂外,Uttenhaler_setup您可以:

var = Uttenhaler_setup()
print 'star_list=%r.' % (var.star_list)
于 2013-07-23T05:01:50.653 回答