python - 使用super()时发生错误

时间:2017-08-23 03:00:08

标签: python super

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中吗?

1 个答案:

答案 0 :(得分:1)

由于您未在<{1}}中任何事情,因此正确的方法是根本不执行它。如果BaseModel.__init__中未定义__init__,您就会自动,更有效地访问超类BaseModel

也就是说,如果你 __init__中做了一些有意义的事情,你就不能像这样使用单一参数BaseModel.__init__。单参数super的使用非常有限(基本上,仅适用于super s,您传递类型但不传递类型的实例作为参数。您需要two-argument super,明确提供您试图绕过寻找超类的当前类的名称,然后classmethod,例如:

self