【问题标题】:Initialize constructor with multiple parameters使用多个参数初始化构造函数
【发布时间】:2016-05-18 14:04:18
【问题描述】:

当我尝试在数据库中保存日志时,我收到此错误TypeError: __init__() takes exactly 1 argument (5 given)

logs_transactions = Logs_transactions('test', 'test', 910000000, current_user.id)
db.session.add(logs_transactions)
db.session.commit()

class Logs_transactions(db.Model):
    __tablename__ = 'logs_transactions'
    id = db.Column(db.Integer, primary_key=True)
    type = db.Column(db.String(100))
    reference = db.Column(db.String(500))
    phone_number = db.Column(db.Integer)
    user_id = db.Column(db.Integer, db.ForeignKey('users_user.id'))

    def __init__(self, **kwargs):
        super(User, self).__init__(**kwargs)

我知道我可以使用这样的东西:

def __init__(self, type, reference, phone_number, user_id):
    self.type = type
    self.reference = reference
    self.phone_number = phone_number
    self.user_id = user_id

但是如果我有很多参数,这种方式很烦人。所以我认为上面的构造函数是等价的,但显然不起作用。基本上我想避免所有参数的显式 self.xxx。

【问题讨论】:

    标签: python python-2.7 flask flask-sqlalchemy


    【解决方案1】:

    两者不等价。 kwargs 接受关键字,您正在传递位置参数。 SQLAlchemy 模型已经有一个接受 kwargs 的初始化程序,您不需要提供自己的。

    Logs_transaction(type='test', reference='test', ...)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多