zoukankan      html  css  js  c++  java
  • python【__setstate__】【__getstate__】

    1. 使用方法
    
    # 自定义对象序列化的时候使用
    
    class Demo:
        def __init__(self, name, age=0):
            self.name = name
            self.age = age
    
        def __str__(self):
            return f"name: {self.name}
    age: {self.age}"
    
    
    class DemoState1(Demo):
        # 反序列化时调用, state 是 __getstate__ 的返回对象,不定义__getstate__ 返回 {'name': 'None', 'age': 0},当前对象的属性
        def __setstate__(self, state):
            print("invoke __setstate__")
            # 将记录的信息("Python3") 赋给 name
            self.name = state
            self.age = 31
    
        # 序列化时调用
        # 定义后:返回 name: Python3
        # 不定义:name: {'name': 'None', 'age': 0}
        def __getstate__(self):
            print("invoke __getstate__")
            # 记录信息 “Python3”
            return "Python3"
    
    
    
    import pickle
    
    demo_1 = DemoState1("None") # "None" 0
    print(demo_1)
    
    
    demo_bytes_1 = pickle.dumps(demo_1) # 序列化为字节串, __getstate__
    print(demo_bytes_1) # 仅对象中的字符串信息是可读的
    
    demo_object_1 = pickle.loads(demo_bytes_1) # 反序列化, __setstate__
    print(demo_object_1)
    
    
    # 如果 __getstate__ 与 __setstate__ 都省略, 那么就是默认情况, 自动保存和加载对象的属性字典 __dict__
    # js = Demo("JavaScript", 26)
    # print(js.__dict__) # 对象的属性字典
    # js_bytes = pickle.dumps(js)
    # print(pickle.loads(js_bytes))
    
    
  • 相关阅读:
    Solr的中英文分词实现
    乐观锁与悲观锁
    Keepalived + nginx实现高可用性和负载均衡
    Heartbeat实现集群高可用热备
    mongoDB 使用手册
    LVS+keepalived负载均衡
    keepalived工作原理和配置说明
    微信设置URL之WebApi方式
    RabbitMQ Windows下安装问题解决
    JSOM 中对各种字段操作
  • 原文地址:https://www.cnblogs.com/amize/p/15429929.html
Copyright © 2011-2022 走看看