zoukankan      html  css  js  c++  java
  • 魔法方法 __slots__ 方法

    场景解析

    网游的用户, 大量的用户本质都是类的实例化对象, 在线人数百万级时对内存是很大的挑战, 如何减少这部分的内存

    方法解析

    __slots__ 方法

    取消默认的类实例中的  __dict__  方法, 限制可选属性为  __slots__  限定的内容,

    失去了  __dict__  实例对象不可以设置  __slots__  中不存在的字典键, 起到限制作用也取消了 __dict__  的内存占用

    import sys
    
    
    class Palyer(object):
        def __init__(self, name, uid, status=0, level=1):
            self.name = name
            self.uid = uid
            self.status = status
            self.level = level
    
    
    class Palyer2(object):
        __slots__ = ["name", "stat", "uid", "level"]
    
        def __init__(self, name, uid, status=0, level=1):
            self.name = name
            self.uid = uid
            self.stat = status
            self.level = level
    
    
    p1 = Palyer("001", "yang")
    p2 = Palyer2("001", "tuo")
    
    
    print dir(p1)
    print dir(p2)
    
    print set(dir(p1)) - set(dir(p2))   # set(['__dict__', 'status', '__weakref__'])
    
    
    print sys.getsizeof(p1.__dict__)    # 272
    # print sys.getsizeof(p2.__dict__)    # AttributeError: 'Palyer2' object has no attribute '__dict__'
    
    p1.abc = 123
    # p2.abc = 123  # AttributeError: 'Palyer2' object has no attribute 'abc'
  • 相关阅读:
    java的应用项目
    项目评审ppt的纲要
    Spark环境搭建
    spark 环境搭建坑
    redis cluster 实现
    hadoop环境搭建编译
    centos 网络配置
    自定义shell开头PS1
    Centos. Mac 通过nfs 搭建共享目录
    mac系统中实现vitualBox中访问内网端口
  • 原文地址:https://www.cnblogs.com/shijieli/p/11101851.html
Copyright © 2011-2022 走看看