例如: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 等模块背后的魔力可能会让人们对该语言的工作原理产生错误的印象。
添加回答
举报
0/150
提交
取消