如何从单独的文件中访问类中的封装值?

时间:2014-01-11 18:47:24

标签: python file class python-3.x encapsulation

我正在处理一个包含多个文件的大型python程序,我想出了一个问题。我从一个单独的文件创建一个类中的5个实例,但我不知道如何创建它后如何访问它。它也是封装的。我将展示一个非常简单的例子,说明我的问题是什么。此示例将使用两个文件file_1和file_2。

file_1

class Hello():

    def set_num(self,one,two):
        self.__first = one
        self.__second = two

file_2

import file_1
def get_it():
    I = -1
    first_one = 50
    second_one = 75
    for i in range(5):
        I+=1
        first_one = first_one*2
        second_one = second_one*1.5
        newI = "a"+str(I)
        new = file_1.Hello()
        file_1.Hello.set_num(new,first_one,second_one) 

def get_first():
    print(a1._Hello__first)

所以我只运行file_2,get_it()。运行时应该创建它(所有幕后):

a1._Hello__first = 100
a1._Hello__second = 112.5
a2._Hello__first = 200
a2._Hello__second = 168.75
.....

这就是应该存储数据的地方。我需要的是从file_2访问该数据,我将在file_2中创建另一个将访问它的函数。 但我的问题是如何访问它? 这是file_2中的第二个函数,它应该返回100,但它会出错:

def get_first():
    print(a1._Hello__first)

当我运行时,我得到“AttributeError:'str'对象没有属性' Hello _first'”。 所以我的问题是,我将如何访问这些数据?

1 个答案:

答案 0 :(得分:0)

在创建一个类的多个实例时,将它们放在可以获取它们的某个位置通常是个好主意,例如:在dictlist之类的容器中:

instances = [] # list to hold instances
for _ in range(5):
    first_one *= 2
    second_one *= 1.5
    new = file_1.Hello() # create instance
    new.set_num(first_one, second_one) # set number
    instances.append(new) # add to list

现在,当你想打印出来时:

for instance in instances:
    print(instance._Hello__first)
    print(instance._Hello__second)