Python中的__SLOTS__属性使用示例

看python社区大妈组织的内容里边有一篇讲python内存优化的,用到了__slots__。然后查了一下,总结一下。感觉非常有用

python类在进行实例化的时候,会有一个__dict__属性,里边有可用的实例属性名和值。声明__slots__后,实例就只会含有__slots__里有的属性名。

# coding: utf-8

class A(object):
  x = 1

  def __init__(self):
    self.y = 2

a = A()
print a.__dict__
print(a.x, a.y)
a.x = 10
a.y = 10
print(a.x, a.y)

class B(object):
  __slots__ = ('x', 'y')
  x = 1
  z = 2

  def __init__(self):
    self.y = 3
    # self.m = 5 # 这个是不成功的

b = B()
# print(b.__dict__)
print(b.x, b.z, b.y)
# b.x = 10
# b.z = 10
b.y = 10
print(b.y)

class C(object):
  __slots__ = ('x', 'z')
  x = 1

  def __setattr__(self, name, val):
    if name in C.__slots__:
      object.__setattr__(self, name, val)

  def __getattr__(self, name):
    return "Value of %s" % name

c = C()
print(c.__dict__)
print(c.x)
print(c.y)
# c.x = 10
c.z = 10
c.y = 10
print(c.z, c.y)
c.z = 100
print(c.z)
{'y': 2}
(1, 2)
(10, 10)
(1, 2, 3)
10
Value of __dict__
1
Value of y
(10, 'Value of y')
100 
(0)

相关推荐

  • python中__slots__用法实例

    本文实例讲述了python中__slots__的用法.分享给大家供大家参考.具体分析如下: 定义__slots__ 后,可以再实例上分配的属性名称将被限制为指定的名称.否则将引发AttributeError,这种限制可以阻止其他人向现有的实例添加新的属性.   使用__slots__的类的实例不在使用字典来存储数据.相反,会使用基于数组的更加紧凑的数据结构. 在会创建大量对象的程序中,使用__slots__可以显著减少内存占用和使用时间 class Account(object): __slot

  • 在Python中使用__slots__方法的详细教程

    正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: >>> class Student(object): ... pass ... 然后,尝试给实例绑定一个属性: >>> s = Student() >>> s.name = 'Michael' # 动态给实例绑定一个属性 >>> print s.name Michael 还可以尝试给实例

  • 用Python中的__slots__缓存资源以节省内存开销的方法

    我们曾经提到,Oyster.com的Python web服务器怎样利用一个巨大的Python dicts(hash table),缓存大量的静态资源.我们最近在Image类中,用仅仅一行__slots__代码,让每个6G内存占用的服务进程(共4个),省出超过2G来. 这是其中一个服务器在部署代码前后的截图: 我们alloc了大约一百万个类似如下class的实例:   class Image(object):     def __init__(self, id, caption, url):   

  • python中的__slots__使用示例

    正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,这就是动态语言的灵活性.先定义class: 复制代码 代码如下: >>> class Staff(object): ...     pass ... 然后,尝试给实例绑定一个属性: 复制代码 代码如下: >>> s = Staff() >>> s.name = 'jack' >>> print s.name jack >&g

  • Python中的__slots__示例详解

    前言 相信Python老鸟都应该看过那篇非常有吸引力的Saving 9 GB of RAM with Python's slots文章,作者使用了__slots__让内存占用从25.5GB降到了16.2GB.在当时来说,这相当于用一个非常简单的方式就降低了30%的内存使用,着实惊人.作者并没有提到他的业务特点和代码,那我们就基于<fluent python>中的例子来验证下是不是有这么厉害: from __future__ import print_function import resour

  • Python中的__SLOTS__属性使用示例

    看python社区大妈组织的内容里边有一篇讲python内存优化的,用到了__slots__.然后查了一下,总结一下.感觉非常有用 python类在进行实例化的时候,会有一个__dict__属性,里边有可用的实例属性名和值.声明__slots__后,实例就只会含有__slots__里有的属性名. # coding: utf-8 class A(object): x = 1 def __init__(self): self.y = 2 a = A() print a.__dict__ print(

  • 详解Python中生成随机数据的示例详解

    目录 随机性有多随机 加密安全性 PRNG random 模块 数组 numpy.random 相关数据的生成 random模块与NumPy对照表 CSPRNG 尽可能随机 os.urandom() secrets 最佳保存方式 UUID 工程随机性的比较 在日常工作编程中存在着各种随机事件,同样在编程中生成随机数字的时候也是一样,随机有多随机呢?在涉及信息安全的情况下,它是最重要的问题之一.每当在 Python 中生成随机数据.字符串或数字时,最好至少大致了解这些数据是如何生成的. 用于在 P

  • Python中join函数简单代码示例

    本文简述的是string.join(words[, sep]),它的功能是把字符串或者列表,元组等的元素给拼接起来,返回一个字符串,和split()函数与正好相反,看下面的代码理解. 首先展示下结果吧! 代码分享: a=["豫","N","C8","C89"] b=("豫","N","C8","C89") c="zhang" a

  • 对Python中for复合语句的使用示例讲解

    当Python中用到双重for循环设计的时候我一般会使用循环的嵌套,但是在Python中其实还存在另一种技巧--for复合语句. 简单写一个小程序,用于延时循环嵌套功能如下: #!/usr/bin/python defFunc1(ten_num,one_num): for i in range(ten_num): for j in range(one_num): print(10 * i + j) Func1(2,5)的执行结果如下: 0 1 2 3 4 10 11 12 13 14 以上是一个

  • 在Python中使用gRPC的方法示例

    本文介绍了在Python中使用gRPC的方法示例,分享给大家,具体如下: 使用Protocol Buffers的跨平台RPC系统. 安装 使用 pip pip install grpcio pip install grpcio-tools googleapis-common-protos gRPC由两个部分构成,grpcio 和 gRPC 工具, 后者是编译 protocol buffer 以及提供生成代码的插件. 使用 编写protocol buffer 使用 gRPC 首先需要做的是设计 p

  • Python中bisect的用法及示例详解

    bisect是python内置模块,用于有序序列的插入和查找. 查找: bisect(array, item) 插入: insort(array,item) 查找 import bisect a = [1,4,6,8,12,15,20] position = bisect.bisect(a,13) print(position) # 用可变序列内置的insert方法插入 a.insert(position,13) print(a) 输出: 5 [1, 4, 6, 8, 12, 13, 15, 2

  • python中实现词云图的示例

    import matplotlib.pyplot as plt import jieba from wordcloud import wordcloud # 1.读出词语 text = open('text/test.txt', 'r', encoding='utf-8').read() print(text) # 2.把歌词剪开 cut_text = jieba.cut(text) # print(type(cut_text)) # print(next(cut_text)) # print(

  • Python中三种条件语句示例介绍

    目录 if if…else if…elif…else 总结 if """ 条件语句: if if...else if...elif...else if 语句的格式: if 条件: 条件成立要执行的语句 条件:运算符构成---> bool """ print(1) print(2) result = input('请输入(y/n):') if result == 'y': print('good~') print('-'*20) if…els

  • Python中三种花式打印的示例详解

    目录 1. 引言 2. 打印圣诞树 2.1 问题描述 2.2 问题分析 3. 打印字母版圣诞树 3.1 问题描述 3.2 问题分析 4. 打印字母版菱形 4.1 问题描述 4.2 问题分析 5. 总结 1. 引言 在Python中有很多好玩的花式打印,对厉害的高手来说可能是小菜一碟,对入门的小白来说往往让人望而退步,我们今天就来挑战下面三个常见的花式打印吧... 2. 打印圣诞树 2.1 问题描述 编码实现函数christmas_tree(height),该函数输入参数为一个整数表示圣诞树的高度

  • Python中字典常用操作的示例详解

    目录 前言 初始化 合并字典 字典推导式 Collections 标准库 字典转 JSON 字典转 Pandas 前言 字典是Python必用且常用的数据结构,本文梳理常用的字典操作,看这个就够了,涉及: 初始化 合并字典 字典推导式 Collections 标准库 字典转JSON 字典转Pandas 初始化 # 最常用这种 my_object = { "a": 5, "b": 6 } # 如果你不喜欢写大括号和双引号: my_object = dict(a=5,

随机推荐