noob问题。
我有以下简单代码:
class Test():
def __init__(self):
self.foo = "foo"
def bar(self):
self.foo = "bar"
def action():
a = input("Anything>")
spam.bar()
print(spam.foo)
spam = Test()
action()
按预期显示“栏”。
当我将其拆分为两个文件时:test_main.py:
from test_module import action
class Test():
def __init__(self):
self.foo = "foo"
def bar(self):
self.foo = "bar"
spam = Test()
action()
和test_module.py:
def action():
a = input("Anything>")
spam.bar()
print(spam.foo)
Function action()无法访问对象“垃圾邮件”:
File "test_main.py", line 14, in <module>
action()
File "/home/krzysztof/Documents/dev/Python Crash Course/12/test_module.py", line 3, in action
spam.bar()
NameError: name 'spam is not defined'
我知道可以进行这种访问,但是我找不到有关如何进行访问的信息。我想念什么?
您以前可以访问spam
,因为它是同一文件中的全局变量。您不能直接从其他文件访问全局变量。
正确的方法是将action()
更改为将垃圾邮件作为参数:
def action(spam):
a = input("Anything>")
spam.bar()
print(spam.foo)
然后使用action(spam)
代替。
您可以将spam
类的实例作为参数传递给动作函数。并更改函数的定义。
test_main.py
from test_module import action
class Test():
def __init__(self):
self.foo = "foo"
def bar(self):
self.foo = "bar"
spam = Test()
action(spam)
test_module.py
def action(spam):
a = input("Anything>")
spam.bar()
print(spam.foo)
导入测试模块文件时,该文件中的整个代码将在导入前运行。因此,垃圾邮件变量在test_module文件中不存在。您应该在操作功能中使用垃圾邮件作为参数。
您可以使用
from test_main import bar
并且您可以使用类似这种格式的东西
from FOLDER_NAME import FILENAME
from FILENAME import CLASS_NAME FUNCTION_NAME