我正在学习Flask中的Web开发.我正在使用SQLAlchemy.典型的数据库对象的结构如下:
class Role(db.Model):
__tablename__ = 'roles'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(64), unique=True)
default = db.Column(db.Boolean, default=False, index=True)
permissions = db.Column(db.Integer)
users = db.relationship('User', backref='role', lazy='dynamic')
def __repr__(self):
return '<Role %r>' % self.name
Run Code Online (Sandbox Code Playgroud)
我的问题是,这些是所有类变量还是对象变量?它们在外面__init__所以看起来它们是类变量,但这看起来很奇怪.关于这个的任何指针都会很棒!谢谢!
type Columnin 的字段Role确实是类变量.但它们将InstrumentedAttribute在角色构建期间被替换,角色构建发生在declarative.aqi.DeclarativeMeta.__init__()
这就是为什么我们定义从Basemetaclass 继承的Role declarative.aqi.DeclarativeMeta(declarative_base()的返回值)
它InstrumentedAttribute是一个数据描述符,它定义__get__并__set__应用于实例字典.因此,我们可以使用它们通过实例进行操作.
在以下示例中,r.name是一个数据描述符,r.name = 'hello'相当于Role.name.__set__(r, 'hello')- >r.__dict__['name'] = 'hello'
r = Role()
r.name = 'hello'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
679 次 |
| 最近记录: |