python对象实例变量看起来像一个类变量?

时间:2016-07-20 06:47:11

标签: python sqlalchemy

我在Python 3中使用SQLAlchemy并且很困惑为什么以下代码有效 - 它在我看来应该是一个对象级变量应该作为类变量。我看到Why is instance variable behaving like a class variable in Python?与我的问题无关。

我在db模块中有以下声明,我在其中创建Base的实例,并在其上设置query变量,指向SessionFactory {{ 1}}

query_property()

然后我的模型类声明如下:

import sqlalchemy as sa
import sqlalchemy.ext.declarative as sa_ed


Base = sa_ed.declarative_base()
engine = sa.create_engine('connection string')
session_factory = session or sa_orm.scoped_session(sa_orm.sessionmaker(autocommit=False, autoflush=False, bind=engine))
Base.query = session_factory.query_property()  # make the query_property available in models for querying

然后我可以通过访问import db class MyModel(db.Base): id = Column(Integer) # more model stuff 变量来运行查询,如下所示:

query

这确实有效,但看起来return MyModel.query.filter(MyModel.id == 22).first() 变量存在于类级而不是对象实例级,因为我可以直接通过类访问它。

我不理解什么?

1 个答案:

答案 0 :(得分:0)

您之前将query属性放在父类上:

Base.query = session_factory.query_property()  # make the query_property available in models for querying

所以query绝对是 a 类(Base)的成员。由于MyModel继承自BaseMyModel也应该有query成员(由于继承的魔力)。