我正在python 3.6.5中使用Flask-SQLAlchemy,到目前为止-尚未能够通过调用__init__()
来扩展模型。我的代码如下:
'''
file: models.py
'''
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Network(db.Model):
__tablename__ = 'network'
id = db.Column(db.Integer, primary_key=True)
baud_rate = db.Column(db.Integer)
def __init__(**kwargs):
super(Network, self).__init__(**kwargs) # see note
尝试实例化网络对象会导致错误:
>>> n = Network(baud_rate=300)
Traceback (most recent call last):
File "<console>", line 1, in <module>
TypeError: __init__() takes 0 positional arguments but 1 was given
这有点令人惊讶,因为我正在使用the recipe given in the Flask-SQLAlchemy documentation:
如果出于任何原因决定覆盖构造函数,请确保 继续接受** kwargs并使用它们调用超级构造函数 **要保留这种行为:
class Foo(db.Model): # ... def __init__(**kwargs): super(Foo, self).__init__(**kwargs) # do custom stuff
由于我使用的是python 3.6,所以我想也许应该将该调用升级到super()
,如:
def __init__(**kwargs):
super().__init__(**kwargs)
...但这没什么区别。
答案 0 :(得分:4)
文档之类的声音忘了提及self
中的__init__
属性(5月接受了pull request):
class Network(db.Model):
__tablename__ = 'network'
id = db.Column(db.Integer, primary_key=True)
baud_rate = db.Column(db.Integer)
def __init__(self, **kwargs):
super().__init__(**kwargs)