Python Flask教程中,super(User, self).__init__(**kwargs) 为什么被IDE提示unexpected argument错误?
用 Pycharm 看的这个代码,super(User, self).__init__(**kwargs) 中的 ···**kwargs``` 部分一直被 Pycharm 提示:unexpected argument
class User(UserMixin, db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(64), unique=True, index=True)
... ...
def __init__(self, **kwargs):
super(User, self).__init__(**kwargs) # 这里 IDE 提示 **kwargs:unexpected argument
... ...
self.followed.append(Follow(followed=self))
Python Flask教程中,super(User, self).__init__(**kwargs) 为什么被IDE提示unexpected argument错误?
因为你忘了传 self
这个错误通常是因为你的 User 类没有正确继承 Flask-Login 的 UserMixin 类,或者父类的 __init__ 方法不接受 **kwargs 参数。
Flask-Login 的 UserMixin 类本身没有 __init__ 方法,它只提供了一些默认的认证方法。当你调用 super().__init__(**kwargs) 时,实际上是在调用 object.__init__(),而 object.__init__() 不接受任何参数。
正确的做法是:
- 如果你的 User 类需要初始化属性,应该在自己的
__init__方法中处理:
from flask_login import UserMixin
from your_database_module import db
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
def __init__(self, username, email, **kwargs):
self.username = username
self.email = email
# 处理其他可能的参数
for key, value in kwargs.items():
setattr(self, key, value)
- 如果使用 SQLAlchemy 等 ORM,通常不需要自定义
__init__方法,因为 ORM 会处理:
from flask_login import UserMixin
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True)
# 不需要写 __init__ 方法,SQLAlchemy 会自动处理
- 如果确实需要调用父类初始化,确保父类接受这些参数:
class User(UserMixin, SomeOtherClass):
def __init__(self, **kwargs):
# 先调用 SomeOtherClass 的 __init__
super().__init__(**kwargs) # 假设 SomeOtherClass 接受 **kwargs
# 然后设置自己的属性
self.custom_attribute = kwargs.get('custom_attribute')
总结: 检查你的继承结构,确保调用的父类 __init__ 方法确实接受你传递的参数。
不妨看一下语法 ** 是什么意思?
感觉这个像是 Pycharm 的 bug,对 super()继承父类的参数识别不准确吧。有了解的同学,请指正。
**kwargs->kwargs
好像没有用 hhh
看一下你的 UserMixin 和 db.Model 的 init 方法怎么定义的,下面这种写法肯定会报错啊
class UserMixin():
def init(self):
pass
class User(UserMixin):
tablename = ‘users’
def init(self, **kwargs):
super(User, self).init(**kwargs)
老铁没毛病啊,这个应该是你 pycharm 的问题

