导入模块,功能,实例

时间:2014-04-11 23:33:29

标签: python import importerror

我一直在运行一些测试,了解导入的工作原理:

文件1:

class Player():

    hp=0

    def __init__(self):
        self.hp=0

    zim = Player()
    zim.hp = 5

file2的:

import test1

print(test1.zim.hp)

我运行file2:得到输出5.(胜利的波浪旗帜)

Soooo,然后我将file1更改为:

def Test():
    class Player():
        hp=0

        def __init__(self):
            self.hp=0

    zim = Player()
    zim.hp = 5

我一直在尝试修改file2中的代码以获得5的输出但是它失败了。有没有办法导入一个函数,然后导入特定的实例数据(本例中为hp)?我知道'return'但是想知道是否有办法修改以下代码来直接导入我需要的实例。

ie:abc会...... O.o

import test1

print(abc.test1.zim.hp) 

〜Ť

2 个答案:

答案 0 :(得分:0)

要回答您的问题“我想知道是否有办法修改以下代码以直接导入我需要的实例”:否。

就像你无法进入一个函数并在一个模块中获取它的内部工作一样,你也不能在导入中这样做。

该函数定义了Player是什么,实例化了它,并调用了它的一个属性。然后函数结束,程序不知道Player是什么,更不用说zim是什么以及它的hp属性是什么!

答案 1 :(得分:0)

在你的test1中:

class Player():
    hp=0
    def __init__(self):
        self.hp=0
    zim = Player()
    zim.hp = 5

这将抛出NameError: name 'Player' is not defined,因为当它的类定义尚未结束时,您正在创建Player的实例。我想你打算这样做:

class Player():
    hp=0
    def __init__(self):
        self.hp=0
zim = Player()    # This and the next line are indented differently
zim.hp = 5

在这种情况下,zim成为test1的模块变量,因此zim.hp可以打印test2

现在,在您将test1编辑为:

之后
def Test():
    class Player():
        hp=0

        def __init__(self):
            self.hp=0

    zim = Player()
    zim.hp = 5

Player对象实例化在它的类声明之外,所以它是正确的。但变量zim仅存在于函数Test()中。当您从另一个模块zim.hp打印时,zim不存在作为要从test2访问的模块变量。

您可以使用return zim.hp方法Test()。如果您这样做,则可以test2作为print(test1.Test())

访问{{1}}的值

希望这有帮助。