python(Class2)

创建大量实例节省内存 slots



# 使用__slots__要注意,__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的

import sys


class Player(object):
    def __init__(self, uid, name, status=0, level=1):
        self.uid = uid
        self.name = name
        self.status = status
        self.level = level


class Player2(object):
    # 为节省内存,阻止动态绑定属性,减少实例中的__dict__,从而达到减少内存开销的目的
    __slots__ = ['uid', 'name', 'status', 'level']

    def __init__(self, uid, name, status=0, level=1):
        self.uid = uid
        self.name = name
        self.status = status
        self.level = level


p1 = Player('0001', 'Jim')
p2 = Player2('0001', 'Jim')

print(dir(p1))
print(dir(p2))
print('*'*80)
print(set(dir(p1)) - set(dir(p2)))  # {'__dict__', '__weakref__'}

# 动态绑定属性
print(p1.__dict__)  # 动态绑定属性 {'level': 1, 'status': 0, 'uid': '0001', 'name': 'Jim'}

# 添加属性
p1.x = 123
print(p1.__dict__)  # {'name': 'Jim', 'uid': '0001', 'x': 123, 'level': 1, 'status': 0}
p1.__dict__['y'] = 99
print(p1.y)  # 99

# 删除属性
delattr(p1, 'x')  # 删除p1的x属性
print(p1.__dict__)  # {'level': 1, 'y': 99, 'uid': '0001', 'status': 0, 'name': 'Jim'}
print('*'*80)
print(sys.getsizeof(p1.__dict__))  # 164

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 要点: 函数式编程:注意不是“函数编程”,多了一个“式” 模块:如何使用模块 面向对象编程:面向对象的概念、属性、...
    victorsungo阅读 1,568评论 0 6
  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 4,062评论 2 27
  • Python进阶框架 希望大家喜欢,点赞哦首先感谢廖雪峰老师对于该课程的讲解 一、函数式编程 1.1 函数式编程简...
    Gaolex阅读 5,529评论 6 53
  • 定义类并创建实例 在Python中,类通过 class 关键字定义。以 Person 为例,定义一个Person类...
    绩重KF阅读 3,976评论 0 13
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,973评论 19 139