魔法方法 __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'
原文地址:https://www.cnblogs.com/shijieli/p/11101851.html