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

python对象实例变量看起来像类变量?,python,sqlalchemy,Python,Sqlalchemy,我在Python3中使用SQLAlchemy,对下面的代码的工作原理感到困惑——在我看来,应该是对象级变量的东西充当了类变量。我看到了和我的问题无关的东西 我在db模块中有以下声明,我在其中创建了Base的实例,并在其上设置了一个query变量,该变量指向SessionFactoryquery\u属性() 然后,我的模型类声明如下: import db class MyModel(db.Base): id = Column(Integer) # more model stuff

我在Python3中使用
SQLAlchemy
,对下面的代码的工作原理感到困惑——在我看来,应该是对象级变量的东西充当了类变量。我看到了和我的问题无关的东西

我在
db
模块中有以下声明,我在其中创建了
Base
的实例,并在其上设置了一个
query
变量,该变量指向
SessionFactory
query\u属性()

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

import db

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

import db

class MyModel(db.Base):
    id = Column(Integer)
    # more model stuff
return MyModel.query.filter(MyModel.id == 22).first()
这确实有效,但看起来
query
变量存在于类级别,而不是对象实例级别,因为我可以通过类直接访问它


我不明白什么?

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

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

所以
query
肯定是类(
Base
)的成员。由于
MyModel
继承自
Base
MyModel
也应该有一个
query
成员(由于继承的魔力)。

您将
query
属性放在父类的前面:

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

所以
query
肯定是类(
Base
)的成员。由于
MyModel
继承自
Base
MyModel
也应该有一个
query
成员(由于继承的魔力)。

我很难理解为什么你会期望
query
不在类级别。。。也许你可以编辑你的帖子并更好地解释一下?我以为
Base=sa_ed.declarative_Base()
正在创建
Base
类的实例,即
Base
类型的对象。我现在明白了,它正在创建一个类,这使得。。。是的,我想那会引起一些混乱。从函数(而不是类实例)返回类是一种有点反常的模式,但在某些情况下它肯定很有用。我很难理解为什么您希望
query
不在类级别。。。也许你可以编辑你的帖子并更好地解释一下?我以为
Base=sa_ed.declarative_Base()
正在创建
Base
类的实例,即
Base
类型的对象。我现在明白了,它正在创建一个类,这使得。。。是的,我想那会引起一些混乱。从函数(而不是类实例)返回类是一种有点不正常的模式,但在某些情况下它肯定是有用的。啊,好吧,
Base
是一个类而不是一个对象!我假设通过执行
Base=sa_ed.declarative_Base()
我正在创建
Base
类的实例,即
Base
对象。看看我是如何使用
Base
的,我可以看出使用classAh类型会更有意义好吧,所以
Base
是一个类而不是一个对象!我假设通过执行
Base=sa_ed.declarative_Base()
我正在创建
Base
类的实例,即
Base
对象。看看我是如何使用
Base
的,我可以看出使用class类型会更有意义