# 案例:
'''
某网络游戏中,定义了玩家类Player(id,name,status)
每当有一个玩家,就会在服务器创建一个Player实例
当在线人数过多时,将产生大量实例(百万级别),消耗内存
如何降低这些实例的大量实例的内存开销?
解决方案:定义类的 __slots__属性,它是用来声明实例属性名字的列表
'''
class Player(object):
__slots__ = ['name', 'id', 'status']
def __init__(self, name, id, status):
self.name = name
self.id = id
self.status = status
def test(self):
print(self.name)
print(self.id)
print(self.status)
class Player1(object):
def __init__(self, name, id, status):
self.name = name
self.id = id
self.status = status
p = Player("Li", '111', '10')
p.test()
p1 = Player1("Li", '111', '10')
print(dir(p1))
print(dir(p))
print(set(dir(p1)) - set(dir(p))) # 求两个实例的差集 p1比p多了 {'__weakref__', '__dict__'} 其__dict__占用大量内存
import sys
print(sys.getsizeof(p1.__dict__)) # 打印出p1.__dict__占用内存大小
"""
实例p1可以动态生成属性,而p则不行,实现阻止动态绑定
"""
p1.x = 1
p1.__dict__['y'] = 2
print(p1.__dict__)
# p.x = 1
# p.__dict__['y'] = 2