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()