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

例如:


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 类还是新手,所以如果这是一个基本问题,我深表歉意。


一只甜甜圈
浏览 113回答 1
1回答

Qyouu

这就是 Flask-SQLAlchemy 元编程。班级级别的分配定义了一个模式。创建类的实例时,它们包含某种访问器,以便对相同名称的引用会self从列中生成特定值。这是可行的,因为 sqlalchemy 编写了大量代码来实现它。这不是普通的 python 类的工作方式。您不需要在常规 Python 类的类级别定义属性。对于常规类,访问检查self.bar“bar”是否是实例本地的,然后检查该类上是否存在“bar”。它就像一个后备方案,但并不需要有一个。无论哪种情况,设置self.bar都会在实例中创建有效的设置。如:>>> class Foo:...&nbsp; &nbsp; &nbsp;bar = 1...&nbsp; &nbsp; &nbsp;def get_bar(self):...&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return self.bar...&nbsp; &nbsp; &nbsp;def set_bar(self, val):...&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.bar = val...&nbsp;>>> 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 等模块背后的魔力可能会让人们对该语言的工作原理产生错误的印象。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python