【发布时间】:2019-12-18 05:28:06
【问题描述】:
我对使用 python marshmallow 库进行数据序列化很感兴趣,但我遇到了一个问题,即当使用 Schema.load 方法构造类时,PyCharm 无法建议类属性,如在示例中显示。
考虑以下可能人为设计的示例:
from marshmallow import Schema, post_load, fields
class User:
def __init__(self, name, age):
self.name = name
self.age = age
class UserSchema(Schema):
name = fields.String(required=True)
age = fields.Integer(required=True)
@post_load
def make_user(self, data, **kwargs):
return User(**data)
class UserHolder:
def __init__(self):
self.user = UserSchema().load({"name": "foo", "age": 42})
class UserHolderConsumer:
def __init__(self):
self.user_holder = UserHolder()
def get_user(self):
print("Name: {}; Age: {}".format(self.user_holder.user.name, self.user_holder.user.age))
if __name__ == "__main__":
UserHolderConsumer().get_user()
代码有效——意味着数据在那里——但 PyCharm 无法建议类属性。我在这方面对 PyCharm 的要求太多了,还是我遗漏了什么?
【问题讨论】:
-
如果你打破它
self.user = UserSchema(); self.user.load(...)我想那么它会工作......或者如果它的python3你可以注释类型self.user:UserSchema = ... -
@JoranBeasley 它是 python3,这两个建议都有效。谢谢!
标签: python serialization pycharm marshmallow