Skip to content

A convenient Python library inspired by Go./一个为python开发的,受golang启发的便捷库,它包含一些新奇的玩意能够提升与丰富你的开发体验。

License

Notifications You must be signed in to change notification settings

Kaguya233qwq/pymygo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pymygo

一个为python开发的,受golang启发的便捷库,它包含一些新奇的玩意能够提升与丰富你的开发体验。

Struct与JsonTag

允许你在python中像go一样序列化/反序列化json和结构体。

定义你自己的结构体,并使用JsonTag为结构体中的字段添加注解:

from pymygo import Struct, JsonTag class User(Struct): Name: JsonTag[str, "name"] # noqa: F821 Age: JsonTag[int, "age"] # noqa: F821 Email: JsonTag[str, "email"] # noqa: F821

JsonTag的设计与go中的json标签类似,你也可以像这样为字段添加注解:

from typing import Annotated from pymygo import Struct, JsonTag class User(Struct): Name: Annotated[str, JsonTag("name")] # noqa: F821 Age: Annotated[str, JsonTag("age")] # noqa: F821 Email: Annotated[str, JsonTag("email")] # noqa: F821

但这种是底层实现的用法,为了简洁性与便利性我更推荐第一种。

反序列化

从字典反序列化:

from pymygo import Struct, JsonTag class User(Struct): Name: JsonTag[str, "name"] # noqa: F821 Age: JsonTag[int, "age"] # noqa: F821 Email: JsonTag[str, "email"] # noqa: F821 user_data = {"name": "Alice"} user = User.from_dict(user_data) print(user) # >> User(name='Alice', age=None, email=None)

从字符串反序列化:

user_data = '{"name": "Alice"}' user = User.unmarshal(user_data) print(user) # >> User(name='Alice', age=None, email=None)

序列化

序列化为字符串并格式化:

from pymygo import Struct, JsonTag class User(Struct): Name: JsonTag[str, "name"] # noqa: F821 Age: JsonTag[int, "age"] # noqa: F821 Email: JsonTag[str, "email"] # noqa: F821 user = User(Name="Jack",Age=18) print(user) # >> User(name='Jack', age=18, email=None) print(user.marshal()) # >> { # "name": "Jack", # "age": 18, # "email": null # }

序列化并转化为字典:

user = User(Name="Jack",Age=18) print(user) # >> User(name='Jack', age=18, email=None) print(user.to_dict()) # >> {'name': 'Jack', 'age': 18, 'email': None}

将omitempty的值设为True可以在序列化后排除对应字段的零值:

from pymygo import Struct, JsonTag class User(Struct): Name: JsonTag[str, "name"] # noqa: F821 Age: JsonTag[int, "age"] # noqa: F821 Email: JsonTag[str, "email", True] # noqa: F821 user = User(Name="Jack",Age=18) print(user) # >> User(name='Jack', age=18) print(user.marshal()) # >> { # "name": "Jack", # "age": 18 # }

使用go开发套件

from pymygo import Struct, JsonTag, go, Error, nil def trigger_error(): return "", Error("failed to fetch data") @go def trigger_panic(): _, err = trigger_error() if err != nil: go.panic(err) trigger_panic()

About

A convenient Python library inspired by Go./一个为python开发的,受golang启发的便捷库,它包含一些新奇的玩意能够提升与丰富你的开发体验。

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages