__slots__

2023-12-26 07:32
文章标签 slots

本文主要是介绍__slots__,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

现在我们终于明白了,动态语言与静态语言的不同

动态语言:可以在运行的过程中,修改代码

静态语言:编译时已经确定好代码,运行过程中不能修改

如果我们想要限制实例的属性怎么办?比如,只允许对Person实例添加name和age属性。

为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的__slots__变量,来限制该class实例能添加的属性:

>>> class Person(object):__slots__ = ("name", "age")>>> P = Person()
>>> P.name = "老王"
>>> P.age = 20
>>> P.score = 100
Traceback (most recent call last):File "<pyshell#3>", line 1, in <module>
AttributeError: Person instance has no attribute 'score'
>>>

注意:
  • 使用__slots__要注意,__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的
In [67]: class Test(Person):...:     pass...:In [68]: t = Test()In [69]: t.score = 100


这篇关于__slots__的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/538570

相关文章

python 类 __slots__ 可限制添加属性和优化减少内存占用

一、如何限制属性 1.给类或者示例添加属性和方法 正常情况下,当我们定义了一个class,创建了一个class的实例后,我们可以给该实例绑定任何属性和方法,对于class本身也是一样的 2.使用__slots__ 如果先要对class和实例加以限制,可以在定义class的时候,定义一个__slots__,来限制能够添加的属性: 这么做之后,没在__slots__里面标记好的属性就不能随便

QT error: expected ‘:‘ before ‘slots‘ public slots:

C:\Users\Administrator\Desktop\VideoHill\GikISearch\net.h:10: error: expected ':' before 'slots' public slots: 先看看头文件里有没有加上引用包含#include <xxxx> 也就是一个引用包含都没有 没有就会报这个。至少一个。 加上后

Python中内存统计与slots及Python的对象模型

文章目录 Python中内存统计与slots及Python的对象模型1.tracemalloc内存统计2.`__slots__`属性3.未实现和未实现异常4.Python的对象模型 Python中内存统计与slots及Python的对象模型 1.tracemalloc内存统计 标准库tracemalloc,可以统计内存使用情况 import tracemalloc #fro

试试Python的__slots__魔法,再也不用担心内存不够用了!

目录 1、初始之解:__slots__基础运用 1.1 __slots__魔法简介 1.2 如何节省内存空间 1.3 实战示例:类定义与性能对比 2、进阶篇:结合元类深化理解 🧠 2.1 元类回顾与应用 2.2 动态管理__slots__ 2.3 高级技巧:动态添加属性 2.4 __slots__与@property装饰器 3、深入探索:__slots__限制与规避 🕵

Python之 __slots__ 的用法

使用__slots__限定class实例 能添加的属性 __slots__仅仅对当前的类实例起作用,对继承的子类不起作用。 知识点: 1、捕获异常最好使用traceback。 2、MethodType作用是将方法绑定到类上,并不是将方法直接写在类中,而是在内存中创建一个link指向外部的方法,在创建实例时候link也会得到复制。 import tracebackfrom types

Vue-插槽 Slots

文章目录 前言什么叫插槽简单插槽指定默认值多个插槽根据父级别名称指定区域显示(具名插槽)作用域插槽 前言 本篇文章不做过多的讲解与说明,只记录个人实验测试案例。 详见:vue 官方文档 插槽 slots 什么叫插槽 之前的博客中,父级组件可以使用props向子级组件中传递String、Array、Object、Function等数据类型。如果需要父级元素向子级元素中传递Ja

(10)svelte 教程:Slots

(10)svelte 教程:Slots 什么是 Slots Slots 是 Svelte 框架中的一种特性,用于在组件中定义插槽,以便父组件可以向子组件传递任意的内容。这种机制使得组件更具灵活性和可复用性,因为你可以在组件内部插入动态的、定制的内容。Slots 主要有两种类型:默认插槽和命名插槽。 逐行解释代码 App.svelte <script>import Modal from '

使用__slots__

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

【Qt知识】Qt框架中的信号(Signals)与槽(Slots)机制

Qt框架中的信号(Signals)与槽(Slots)机制是一种强大的通信方式,允许对象之间相互通信而无需对象之间直接引用或了解对方。这一机制简化了应用程序的事件处理和组件之间的交互,是Qt的一大特色和核心概念。 基本概念 信号(Signals):信号是类的一部分,当特定事件发生时自动发出。你可以把它想象成一个对象说:“某事发生了!”信号不需要指定接收者,也不关心谁会接收到这

小白学python之使用__slots__学习笔记

本文以廖雪峰的官方网站为参考来学习python的。其学习链接为廖雪峰小白学python教程。 本文是学习到python的实例属性和类属性。参考链接廖雪峰python使用__slot__。 尝试给实例绑定一个属性: class Student(object):passs = Student()s.name = 'Michael'print(s.name) 运行结果: Michael