我一直在运行一些测试,了解导入的工作原理:
文件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)
〜Ť
答案 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())
希望这有帮助。