我对使用 pythonmarshmallow
库进行数据序列化感兴趣,但是在使用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 = UserSchema().load({"name": "foo", "age": 42})
我认为你应该考虑改用marhsmallow注释 https://marshmallow-annotations.readthedocs.io/en/latest/quickstart.html