在以下代码段中:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Flight(db.Model):
__tablename__ = "flights"
id = db.Column(db.Integer, primary_key=True)
origin = db.Column(db.String, nullable=False)
destination = db.Column(db.String, nullable=False)
duration = db.Column(db.Integer, nullable=False)
def add_passenger(self, name):
p = Passenger(name=name, flight_id=self.id)
db.session.add(p)
db.session.commit()
为什么没有db
的类中的global
可以用作全局变量?我检查了python doc,发现:
在Python中,仅在函数内部引用的变量是隐式全局的。
我想知道这条规则在这里适用吗?因为db
不仅被add_passenger
方法引用,而且被修改。
答案 0 :(得分:0)
您未在任何函数内为变量db
分配任何内容。
add_passenger
仅调用一个方法。它仅更改内部状态,而不更改引用本身。
如果您这样做
db = SQLAlchemy()
在函数内部,则需要使用global
,否则,您将仅在本地范围获得另一个名为db
的变量,并且使用它不会对全局{ {1}}个对象。