从另一个模块中的函数访问实例的方法

问题描述 投票:0回答:4

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'

我知道可以进行这种访问,但是我找不到有关如何进行访问的信息。我想念什么?

python class import module instance
4个回答
1
投票

您以前可以访问spam,因为它是同一文件中的全局变量。您不能直接从其他文件访问全局变量。

正确的方法是将action()更改为将垃圾邮件作为参数:

def action(spam):
    a = input("Anything>")
    spam.bar()
    print(spam.foo)

然后使用action(spam)代替。


1
投票

您可以将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)

0
投票

导入测试模块文件时,该文件中的整个代码将在导入前运行。因此,垃圾邮件变量在test_module文件中不存在。您应该在操作功能中使用垃圾邮件作为参数。


-1
投票

您可以使用

from test_main import bar

并且您可以使用类似这种格式的东西

from FOLDER_NAME import FILENAME
from FILENAME import CLASS_NAME FUNCTION_NAME
© www.soinside.com 2019 - 2024. All rights reserved.