通过导入的函数将变量转换为类对象

时间:2016-07-06 00:41:38

标签: class python-3.x global-variables

我做了一个班级定义......

class Element():
def __init__(self, word_list, type):

    self.type = type
    self.list = word_list

在另一个Python文件(practice_page_1)上有一个函数定义......

from class_element import Element

test_list = []

def test(word_list):
    num = 0
    for letter in word_list:
        if letter == 'd':
            global test_list
            test_list = word_list[:num + 1]
            test_list = Element(test_list, 'letters')
            return True
        num += 1

然后在另一个Python文件中运行函数...

from practice_page_1 import test
from practice_page_1 import test_list

my_list = ['a', 'b', 'c', 'd', 'a', 'a', 'e', 'f', 'a', 'g']
test(my_list)
print(test_list)

当它打印test_list时,它打印一个空列表[],而我期望它打印一个类对象。但是,如果我将完全相同的操作行移回practice_page_1,它会将test_list打印为类对象。这是为什么?

1 个答案:

答案 0 :(得分:0)

使用from ... import ...时,导入的对象将放在当前名称空间中。它是对象本身的引用,而不是模块变量。如果您想获得最新的更改,请使用以下命令:

import practice_page_1

my_list = ['a', 'b', 'c', 'd', 'a', 'a', 'e', 'f', 'a', 'g']
practice_page_1.test(my_list)
print(practice_page_1.test_list)

这是有效的,因为您现在正在访问模块命名空间中名为test的变量而不是当前的变量(它曾经是与模块命名空间中的对象相同的对象)。当你有一个名字长的模块时,你可能想要import ... as ...,但你去了。