Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Python如何从类方法中的另一个模块调用方法_Python 3.x_Flask Sqlalchemy - Fatal编程技术网

Python 3.x Python如何从类方法中的另一个模块调用方法

Python 3.x Python如何从类方法中的另一个模块调用方法,python-3.x,flask-sqlalchemy,Python 3.x,Flask Sqlalchemy,我有两个这样的文件 # functions.py #I have a suspicion this 2 way import might be an issue from models import * def foo(): return 'bar' def some_other_unrelated_foo(): users = User.query.all() return users 及 但如果我尝试: print(user_a.name_and_foo())

我有两个这样的文件

# functions.py
#I have a suspicion this 2 way import might be an issue
from models import *

def foo():
    return 'bar'

def some_other_unrelated_foo():
    users = User.query.all()
    return users

但如果我尝试:

print(user_a.name_and_foo())
我得到一个错误:

NameError: name 'foo' is not defined
如果我有一个文件:

#models

def foo():
    return 'bar'

class User(UserMixin, db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(), unique=True)

    def name_and_foo(self):
        return self.username + foo()
我得到了正确的答案:

print(user_a.name_and_foo())
result: "user_abar"

让functions.py中的函数对models.py中的类方法可见的正确方法是什么?

您必须首先调用该函数

#models
from functions import *

class User(UserMixin, db.Model):
    foo = foo()
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(), unique=True)

    def name_and_foo(self):
        return self.username + foo()

但是,请确保您的文件位于同一位置,这也可能是当时的问题

好的,我在发布后不久就解决了这个问题,我将两个文件的导入移到了彼此的底部,这似乎解决了问题。我不是100%清楚这为什么有效。

如果您尝试从函数导入foo
,会发生什么?还有,这是如何运行的?从工作目录中的命令行?只是一个提示,通配符从models import*
这样导入,可以隐藏可能有助于调试的潜在错误。您没有。OP提到,当函数在同一个文件中时,它会工作。此外,如果
foo
将返回一个函数或可调用函数,则这是唯一可行的方法。这一行
foo=foo()
foo
设置为
'bar'
,然后这一行
返回self.username+foo()
将引发
名称错误和尝试调用字符串的错误。
#models
from functions import *

class User(UserMixin, db.Model):
    foo = foo()
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(), unique=True)

    def name_and_foo(self):
        return self.username + foo()