`

__slots__类属性

 
阅读更多
字典位于实例的“心脏”,__dict__属性跟踪所有实例属性。举例来说,你有一个实例inst,它
有一个属性foo,那使用inst.foo来访问它与使用inst.__dict__['foo']来访问是一致的。

字典会占据大量内存,如果你有一个属性数量很少的类,但有很多实例,那么正好是这种情况。
为内存上的考虑,用户现在可以使用__slots__属性来替代__dict__。

基本上,__slots__是一个类变量,任何试图创建一个其名不在__slots__中的名字的实例属性都将
导致AttributeError异常。
>>> class SlottedClass(object):
...     __slots__ = ('foo', 'bar')
...
>>> c = SlottedClass()
>>> c.foo = 42
>>> c. xxx = "do"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'SlottedClass' object has no attribute 'xxx'
>>> c.foo
42
>>> c.bar
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: bar
>>>

这种特性的主要目的是节约内存。其副作用是某种类型的“安全”,它能防止用户随心所欲的
动态增加实例属性。带__slots__属性的类定义不会存在__dict__了(除非你在__slots__中增
加'__dict__'元素)
分享到:
评论

相关推荐

    Python中的__SLOTS__属性使用示例

    在Python中,__slots__属性是类定义中的一个特殊属性,它的目的是为了优化内存使用。通常情况下,Python中定义的类的实例会有一个__dict__属性,用于存储实例的属性和对应的值。但有时这种机制会导致较大的内存开销...

    python3中使用__slots__限定实例属性操作分析

    在Python 3中,`__slots__`是一个特殊属性,用于优化类的内存使用和限制实例可以添加的属性。这个特性对于大型应用或者需要频繁创建对象的场景特别有用,因为它可以减少内存开销,提高程序性能。下面我们将深入探讨`...

    Python中__slots__属性介绍与基本使用方法

    在Python编程语言中,`__slots__`是一个特殊属性,用于优化类的内存使用和提高性能。当创建一个类的实例时,如果没有定义`__slots__`,Python会为每个实例创建一个`__dict__`字典来存储实例变量。然而,`__dict__`...

    python中的__slots__使用示例

    为了实现这一目标,Python提供了一个特殊的类属性__slots__,它允许开发者明确地声明实例属性。通过定义__slots__变量,类的实例将只能拥有__slots__中列出的属性,从而达到限制的目的。 __slots__变量是一个元组或...

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

    __slots__的工作原理是告诉Python解释器,对于该类的实例,只需要为指定的属性分配空间,而不是为每个实例都创建一个属性字典。当定义了__slots__后,Python不会为每个实例创建一个__dict__来存储属性,而是直接使用...

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

    在Python编程语言中,__slots__是一个特殊的类属性,它被用于声明类实例能拥有的唯一属性,即类实例只能有__slots__中定义的属性。使用__slots__可以在内存上带来优化,因为Python解释器不需要为每个实例创建__dict_...

    PYTHON学习教程资源:使用slots操作代码.docx

    本文主要讲解了 Python 中的类和实例绑定属性和方法的机制,以及使用 `__slots__` 限制实例的属性。 首先,我们定义了一个 `Student` 类,创建了一个实例 `s`,然后尝试给实例绑定一个属性 `name` 和一个方法 `set_...

    通过实例了解python__slots__使用方法

    当我们定义一个类时,可以在类定义内部设置`__slots__`变量,它是一个包含字符串的元组,表示允许绑定到该类实例的属性名称。例如: ```python class Student(object): __slots__ = ('name', 'age') ``` 在这个...

    Python核心编程(第二版).pdf (压缩包分2部分,第二部分)

     2.18 类   2.19 模块   2.19.1 如何导入模块   2.19.2 如何访问一个模块函数或访问一个模块变量   2.20 实用的函数   2.21 练习   第3章 python基础   3.1 语句和语法   3.1.1 注释(#)...

    Python核心编程(第二版).pdf (压缩包分2部分,第一部分)

     2.18 类   2.19 模块   2.19.1 如何导入模块   2.19.2 如何访问一个模块函数或访问一个模块变量   2.20 实用的函数   2.21 练习   第3章 python基础   3.1 语句和语法   3.1.1 注释(#)...

    python使用__slots__让你的代码更加节省内存

    因此这种默认的做法可以通过在新式类中定义了一个__slots__属性从而得到了解决。__slots__声明中包含若干实例变量,并为每个实例预留恰好足够的空间来保存每个变量,因此没有为每个实例都创建一个字典,从而节省空间...

    Python类中的魔法方法之 __slots__原理解析

    在这个例子中,`Foo`类声明了`x`, `y`, `z`三个属性,并通过`__slots__`告诉Python不要为实例创建`__dict__`。因此,实例`c`只能拥有`x`, `y`, `z`这三个属性,尝试添加其他未在`__slots__`中声明的属性(如`e`)会...

    python中__slots__用法实例

    在Python中,`__slots__`是一个非常有用的特性,它允许用户在类定义中明确指定类的实例能够拥有的属性。这一特性不仅可以帮助开发者更好地控制类的内存使用,还可以提高性能,尤其是在需要创建大量对象的情况下。 #...

    Python核心编程第二版

     2.18 类   2.19 模块   2.19.1 如何导入模块   2.19.2 如何访问一个模块函数或访问一个模块变量   2.20 实用的函数   2.21 练习   第3章 Python基础   3.1 语句和语法   3.1.1 注释(#)...

Global site tag (gtag.js) - Google Analytics