from flask_sqlalchemy import SQLAlchemy
import datetime
db = SQLAlchemy()
class BaseModel(db.Model):
"""Base data model for all objects"""
__abstract__ = True
def __init__(self, *args):
super(self).__init__(*args)
def __repr__(self):
"""Define a base way to print models"""
return '%s(%s)' % (self.__class__.__name__, {
column: value
for column, value in self._to_dict().items()
})
def json(self):
"""Define a base way to jsonify models, dealing with datetime objects"""
return {
column: value if not isinstance(value, datetime.date) else value.strftime('%Y-%m-%d')
for column, value in self._to_dict().items()
}
class Station(BaseModel, db.Model):
"""Model for the stations table"""
__tablename__ = 'stations'
id = db.Column(db.Integer, primary_key = True)
lat = db.Column(db.Float)
lng = db.Column(db.Float)
TypeError:super()参数1必须是type,而不是Station
我知道super,没有参数只在python3中使用。但在我的情况下,我应该填写super()?也可以将super()放在父类(basemodel)的init中吗?
答案 0 :(得分:1)
由于您未在<{1}}中做任何事情,因此正确的方法是根本不执行它。如果BaseModel.__init__
中未定义__init__
,您就会自动,更有效地访问超类BaseModel
。
也就是说,如果你 在__init__
中做了一些有意义的事情,你就不能像这样使用单一参数BaseModel.__init__
。单参数super
的使用非常有限(基本上,仅适用于super
s,您传递类型但不传递类型的实例作为参数。您需要two-argument super
,明确提供您试图绕过寻找超类的当前类的名称,然后classmethod
,例如:
self