为了账号安全,请及时绑定邮箱和手机立即绑定

当使用 Flask-SQLAlchemy 的类声明模型时,为什么列变量不需要“self.”?

当使用 Flask-SQLAlchemy 的类声明模型时,为什么列变量不需要“self.”?

一只甜甜圈 2023-06-27 18:24:23
例如:class User(db.Model):    id = db.Column(db.Integer, primary_key=True)    username = db.Column(db.String(80), unique=True, nullable=False)    email = db.Column(db.String(120), unique=True, nullable=False)    def __repr__(self):        return '<User %r>' % self.username我对 python 类还是新手,所以如果这是一个基本问题,我深表歉意。
查看完整描述

1 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

这就是 Flask-SQLAlchemy 元编程。班级级别的分配定义了一个模式。创建类的实例时,它们包含某种访问器,以便对相同名称的引用会self从列中生成特定值。这是可行的,因为 sqlalchemy 编写了大量代码来实现它。


这不是普通的 python 类的工作方式。您不需要在常规 Python 类的类级别定义属性。对于常规类,访问检查self.bar“bar”是否是实例本地的,然后检查该类上是否存在“bar”。它就像一个后备方案,但并不需要有一个。无论哪种情况,设置self.bar都会在实例中创建有效的设置。如:


>>> class Foo:

...     bar = 1

...     def get_bar(self):

...             return self.bar

...     def set_bar(self, val):

...             self.bar = val

... 

>>> foo = Foo()

>>> print(Foo.bar, foo.bar, foo.get_bar())

1 1 1

>>> foo.set_bar(999)

>>> print(Foo.bar, foo.bar, foo.get_bar())

1 999 999

在学习 Python 时,sqlalchemy、numpy 和 pandas 等模块背后的魔力可能会让人们对该语言的工作原理产生错误的印象。


查看完整回答
反对 回复 2023-06-27
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信