python的动态性和_slot_

Python __slots__属性的实例详解,提高类的效率和可读性 Python的内置类属性__slots__,它提供了一种强大的机制,用于限制类的属性,从而改进内存使用和属性访问速度。在本文中,将深入研究__slots__的作用、用法和示例代码,以帮助大家更好地理解和利用这一特性。 阅读详情

python是动态语言

1. 动态语言的定义

动态编程语言 是 高级程序设计语言 的一个类别,在计算机科学领域已被广泛应用。

它是一类 在运行时可以改变其结构的语言 :例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力。

例如JavaScript便是一个动态语言,除此之外如 PHP 、 Ruby 、 Python 等也都属于动态语言,而 C 、 C++ 等语言则不属于动态语言。----来自 维基百科

2. 运行的过程中给对象绑定(添加)属性

>>> class Person(object):
    def __init__(self, name = None, age = None):
        self.name = name
        self.age = age


>>> P = Person("小明", "24")
>>>

在这里,我们定义了1个类Person,在这个类里,定义了两个初始属性name和age,但是人还有性别啊!如果这个类不是你写的是不是你会尝试访问性别这个属性呢?

>>> P.sex = "male"
>>> P.sex
'male'
>>>

这时候就发现问题了,我们定义的类里面没有sex这个属性啊!怎么回事呢? 这就是动态语言的魅力和坑! 这里 实际上就是 动态给实例绑定属性!

3. 运行的过程中给类绑定(添加)属性

>>> P1 = Person("小丽", "25")
>>> P1.sex

Traceback (most recent call last):
  File "<pyshell#21>", line 1, in <module>
    P1.sex
AttributeError: Person instance has no attribute 'sex'
>>>

我们尝试打印P1.sex,发现报错,P1没有sex这个属性!---- 给P这个实例绑定属性对P1这个实例不起作用! 那我们要给所有的Person的实例加上 sex属性怎么办呢? 答案就是直接给Person绑定属性!

>>>> Person.sex = None #给类Person添加一个属性
>>> P1 = Person("小丽", "25")
>>> print(P1.sex) #如果P1这个实例对象中没有sex属性的话,那么就会访问它的类属性
None #可以看到没有出现异常
>>>

4. 运行的过程中给类绑定(添加)方法

我们直接给Person绑定sex这个属性,重新实例化P1后,P1就有sex这个属性了! 那么function呢?怎么绑定?

>>> class Person(object):
    def __init__(self, name = None, age = None):
        self.name = name
        self.age = age
    def eat(self):
        print("eat food")


>>> def run(self, speed):
    print("%s在移动, 速度是 %d km/h"%(self.name, speed))


>>> P = Person("老王", 24)
>>> P.eat()
eat food
>>> 
>>> P.run()
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    P.run()
AttributeError: Person instance has no attribute 'run'
>>>
>>>
>>> import types
>>> P.run = types.MethodType(run, P)
>>> P.run(180)
老王在移动,速度是 180 km/h

既然给类添加方法,是使用类名.方法名 = xxxx,那么给对象添加一个方法也是类似的对象.方法名 = xxxx
完整的代码如下:

import types

#定义了一个类
class Person(object):
    num = 0
    def __init__(self, name = None, age = None):
        self.name = name
        self.age = age
    def eat(self):
        print("eat food")

#定义一个实例方法
def run(self, speed):
    print("%s在移动, 速度是 %d km/h"%(self.name, speed))

#定义一个类方法
@classmethod
def testClass(cls):
    cls.num = 100

#定义一个静态方法
@staticmethod
def testStatic():
    print("---static method----")

#创建一个实例对象
P = Person("老王", 24)
#调用在class中的方法
P.eat()

#给这个对象添加实例方法
P.run = types.MethodType(run, P)
#调用实例方法
P.run(180)
#学习中遇到问题没人解答?小编创建了一个Python学习交流群:725638078
#给Person类绑定类方法
Person.testClass = testClass
#调用类方法
print(Person.num)
Person.testClass()
print(Person.num)

#给Person类绑定静态方法
Person.testStatic = testStatic
#调用静态方法
Person.testStatic()

5. 运行的过程中删除属性、方法

删除的方法:

  • del 对象.属性名
  • delattr(对象, “属性名”)

通过以上例子可以得出一个结论:相对于动态语言,静态语言具有严谨性!所以,玩动态语言的时候,小心动态的坑!

那么怎么避免这种情况呢? 请使用__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
Python字典底层原理:哈希表、内存管理与性能优化 字典是Python中最常用的数据结构,其本质是基于哈希表实现的高效内存索引机制。它通过哈希函数将键映射到连续内存槽位,利用开放寻址法解决冲突,并深度适配CPU缓存行(如24字节slot对齐64字节cache line)以提升局部性。这种设计赋予字典平均O(1)查找性能,但实际表现受哈希分布、装载因子、键不可变性及内存碎片等多重因素影响。在工程实践中,`dict.setdefault()`和`defaultdict`因C层原子操作显著优于Python层条件判断;而`dict.fromkeys()`引发的共享可 阅读详情

相关推荐

PyQt Designer入门指南:可视化GUI开发与Python桌面应用实战

图形用户界面(GUI)开发是桌面应用构建的核心环节,其原理在于通过控件库和布局管理器实现用户交互的可视化。在Python生态中,PyQt作为成熟的GUI框架,结合其可视化设计工具PyQt Designer,能显著提升开发效率。PyQt Designer采用拖拽式界面设计,自动生成UI描述文件,开发者可专注于业务逻辑实现,这一技术价值在于降低GUI开发门槛并加速原型迭代。其应用场景广泛,涵盖数据工具、办公自动化及小型桌面软件等。本文以PyQt Designer为切入点,详解环境搭建、控件拖拽、信号槽机制及项目

weixin_30729609的博客 643

python优化之-slot

slot优化python内存

Shine_mmm 1024

单智能体甜点区:AI工程落地的黄金平衡点

在AI系统工程实践中,‘单智能体’并非能力受限的权宜之计,而是面向可控性、可测性与可维护性的理性架构选择;其核心价值在于通过明确的任务边界(中等动态性、收敛知识域、清晰决策链路)和强约束的工具调用机制,规避多智能体常见的协同开销、状态漂移与故障归因模糊等问题;尤其在金融、医疗、政务等高可靠性要求场景中,单智能体配合RAG双层评估、系统级偏见控制与上下文卫生管理,能显著提升端到端准确率、降低MTTR并保障法务合规;本文聚焦真实项目中如何识别、守卫并持续优化这一高成功率‘甜点区’。

weixin_30315435的博客 300

了解 Python 中的 slots 槽

为类创建对象需要内存,存储的属性是字典的形式。如果我们需要分配数千个对象,将需要大量的内存和索引时间。Slots 或__slots__提供了一种独特的机制来减少对象的大小和更快的索引。本文将讨论槽常量变量在 Python 中的工作原理以及它如何比使用字典更好。

迹忆客 538

4 种方法识别Linux系统 USB 设备

导读 如果在系统中插入一个设备,尤其是在桌面环境下,比如 USB 设备,它会自动挂载到一个指定目录,一般是在 /media/username/device-label 目录下,之后你就可以进入到该目录下访问那些文件了。然而,在服务器上就不是这么回事了,你必须手动挂载这个设备,并且指定一个挂载点。 查询USB设备 Linux 系统使用 /dev 目录下特定的设备文件来标识插入的

郑帅的博客 1986

R语言实战:从Raw Counts到TPM/FPKM的完整转换指南(含代码调试技巧)

本文详细介绍了在R语言环境中将RNA-seq原始计数(raw counts)转换为TPM/FPKM值的完整流程,包含代码实现和常见错误调试技巧。通过具体案例演示如何正确处理基因长度和测序深度因素,实现表达量标准化,为生物信息学分析提供可靠数据基础。特别适合需要进行转录组数据分析的研究人员和实验室技术人员参考。

weixin_28559803的博客 478

Python优化之__slots__

Python的类要怎么优化? 字典是怎么回事? 什么是__slots__? 一文说清!

希夜希希希的博客 1196

Lumerical-定向耦合器1

概述:本文章使用FDE求解器对定向耦合器进行了数值仿真,讨论了耦合器的间距相关性,耦合长度相关性,波长相关性。讨论了脊形波导和条形波导两种情况。

m0_61776728的博客 4614

详细分析Python中的__slots__基本知识(附Demo)

__slots__ 是 Python 类中的一个特殊属性,用于限制实例可以动态添加的属性,并减少内存占用

码农研究僧的博客 1439

数字IC后端PPA优化实战:Innovus中Timing一致性策略与Module Region布局技巧

本文深入探讨了数字IC后端设计中PPA优化的核心挑战,重点解析了Innovus与PrimeTime之间Timing不一致的根本原因。通过实战案例,详细介绍了在Innovus中设置Timing Margin、Derate以及RC Scale Factor等关键策略,以校准时序视图。同时,文章分享了利用Module Region进行物理布局规划的技巧,将关键模块约束在最优区域,并结合Group Path等进阶方法,有效提升时序收敛效率与PPA结果的可预测性。

f9g0h的博客 2687

UE5在Ubuntu22.04.4下的高效开发环境配置指南

本文详细介绍了在Ubuntu 22.04.4系统上配置UE5高效开发环境的完整指南,包括系统准备、显卡驱动安装、UE5引擎编译与配置、开发工具链设置以及性能优化技巧。通过逐步指导,帮助开发者快速搭建稳定的UE5开发环境,解决常见问题,提升开发效率。

weixin_29251131的博客 383

python动态_python的动态性和_slot_

python是动态语言1. 动态语言的定义动态编程语言是高级程序设计语言的一个类别,在计算机科学领域已被广泛应用。它是一类 在运行时可以改变其结构的语言 :例如新的函数、对象、甚至代码可以被引进,已有的函数可以被删除或是其他结构上的变化。动态语言目前非常具有活力。例如JavaScript便是一个动态语言,除此之外如 PHP 、 Ruby 、 Python 等也都属于动态语言,而 C 、 C+...

weixin_39928787的博客 148

如何使用rdma-core来实现RDMA操作

rdma-core 是一个开源项目,为远程直接内存访问(RDMA)提供用户空间的支持。它包括 RDMA 设备的驱动程序、库和工具,旨在简化 RDMA 应用的开发和部署。

嵌入式技术开发 3896

Python类学习(七)——动态性、type()函数定义类、metaclass

目录 1. 动态增加或者修改对象的属性和方法 2. 使用类添加方法为所有对象动态增加方法 3. 使用__slot__限制为对象动态添加属性和方法 4. 使用type()函数定义类 5. metaclass(可用于为一些类添加共同的方法,避免每个类都需要去定义该函数) 动态语言的典型特征:类、对象的属性和方法都可以动态的增加和修改; 1. 动态增加或者修改对象的属性和方法 cla...

The Matrix 283

2026.5.3:Ubuntu26.04下uv所需的环境变量pyproject.toml

本文档提供了Python开发环境的配置指南。主要包括: 设置环境变量(HF_ENDPOINT、UV_PYTHON_INSTALL_MIRROR等) 创建pyproject.toml配置文件,定义项目元数据(名称、版本等) 指定依赖项(torch系列库)及其安装源(PyTorch官方CUDA 12.8镜像) 配置Python版本要求(>=3.13,<3.14) 设置平台限制(Linux/Windows) 该配置适用于需要PyTorch CUDA 12.8支持的项目开发环境搭建。

拥抱具身智能,昇腾Ascend C 589

【图像去噪】论文复现:Mamba没Out!MaIR的Pytorch源码复现,跑通全流程,轻松解决环境配置问题,图文结合,明确MaIR创新点,与MambaIR对比,示意图与源码对应,清晰易懂,注释详细!

论文题目:MaIR: A Locality- and Continuity-Preserving Mamba for Image Restoration —— MaIR:用于图像恢复的局部性和连续性保持 Mamba【图像去噪】论文精读:MaIR: A Locality- and Continuity-Preserving Mamba for Image Restoration【图像去噪】论文复现:Man!

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1114

Python字典方法深度指南:从原理到高性能实践

字典是Python最核心的内置数据结构,其底层基于哈希表实现,具备O(1)平均时间复杂度的键值查找能力。理解字典方法的本质,需回归哈希计算、引用计数与动态视图三大机制——例如.get()零副作用、.setdefault()提供原子性读设、.keys()返回实时动态视图而非副本。这些特性直接决定代码性能、线程安全性与内存效率,在Web框架参数解析、数据清洗、LRU缓存及嵌套配置合并等高频场景中尤为关键。本文聚焦真实工程痛点,解析20+方法的适用边界与误用陷阱,助你写出更健壮、更高效、更易维护的Python字典

weixin_30764771的博客 309

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Python __slots__ 内存优化实战:从原理到工程落地

在 Python 中,对象默认携带 __dict__ 字典导致显著内存开销,尤其在高实例数量场景下(如 ORM 模型、实时数据采样点)易引发内存膨胀与 GC 压力。__slots__ 并非语法糖,而是通过编译期固化属性名、禁用动态字典、生成紧凑 C 结构体内存布局,实现 40%–70% 单实例内存压缩与属性访问加速。其核心价值在于保持完整 class 语义(支持继承、@property、描述符、弱引用)的同时剔除冗余元数据,适用于所有需兼顾可维护性与资源效率的生产级数据类。本文结合内存实测、多重继承避坑、p

weixin_34095889的博客 408

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python_限制类实例可以绑定的属性——__slots__——六月十四

可以有效地减少实例的内存消耗,因为它告诉解释器不要为实例的所有属性创建字典,而是使用固定大小的数组来存储这些属性。是一种用于限制类实例属性的机制,它可以提高内存效率并约束对象属性的动态性。在设计类时,如果你希望限制实例可以绑定的属性,可以考虑使用。变量并指定允许绑定的属性名称,可以限制实例只能拥有指定的属性,而不能动态地绑定其他属性。,我们限制了实例可以绑定的属性,提高了内存效率并约束了对象属性的动态性。是一个特殊的类变量,用于限制类实例可以绑定的属性。变量,那么子类的实例可以绑定子类和父类中定义的属性。

qq_59344127的博客 242

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring Boot校园无人快递系统:从CRUD到智能预测与派单的毕业设计实战

在软件工程实践中,构建一个稳定、可维护的业务系统是核心基础。Spring Boot作为Java领域主流的快速开发框架,通过自动配置和约定优于配置的原则,极大地简化了Web应用、数据访问和系统集成的开发流程。其技术价值在于能够帮助开发者快速搭建具备生产就绪特性的应用骨架,将精力聚焦于业务逻辑实现。在电商、物流等涉及订单管理与智能决策的应用场景中,Spring Boot常作为后端服务的基石,整合数据持久化、缓存、消息队列等组件,并可通过RESTful API与Python机器学习服务等异构系统进行松耦合集成,从

weixin_30596343的博客 373

四语言反射计数原理与工程实践:Java/Python/C++/JS对比

反射计数是衡量编程语言运行时元信息访问能力的核心指标,本质是对类型、方法、字段等可反射对象的动态统计能力。其底层依赖于各语言的类型系统设计(如JVM的RTTS、CPython的对象字典、C++20的编译期反射、V8的隐藏类机制),直接影响AOP代理、序列化框架、测试覆盖率分析等通用工具库的性能天花板。在微服务启动校验、动态组件注册、元数据协议设计等典型场景中,不同语言的计数精度、边界定义与性能表现差异显著——Java受限于类加载机制,Python需规避__slots__陷阱,C++依赖宏注册博弈,JS则受P

weixin_34411563的博客 361

SGLang RBG调度器部署Qwen3-235B生产实践

大模型推理服务中,KV Cache管理与请求级调度是保障低延迟、高稳定性的核心基础。传统continuous batching在长尾输入下显存浪费严重,而基于请求生命周期的RBG(Request-Based GPU scheduling)调度器通过动态slot分配、反压控制和优先级路由,显著提升显存利用率与P95延迟可控性;结合Qwen3-235B特有的MoE稀疏激活、超长上下文数值不稳及中文分词敏感等挑战,需定制tokenizer预处理、RoPE缩放与安全context窗口。本文聚焦真实政务、法律、医疗场

weixin_30859423的博客 399

TikTok X-Dynosaur 逆向日志(item_list 接口)分析

使用真实浏览器捕获的请求中的X-Dynosaur,按运行时s2X-Dynosaur 字符长度: 392解码长度: 292 bytes前 32 bytes:首两字节: 3f 74旧实现 magic 4a 00: 不存在明文 ASCII X-Dynosaur: 不存在这证明当前线上样本与旧实现的外层密文前缀不同,尽管两者同为 292 bytes 且使用同一自定义字符表。旧实现的0x4a00位于 XOR 前明文,因此本样本不能仅以不含4a00排除旧布局;

weixin_52283613的博客 917

光传送网建模与价值评估:从网络抽象到投资决策的工程实践

光传送网是现代通信的骨干基础设施,其核心在于通过波分复用等技术,在光纤频谱资源上高效承载海量数据业务。其建模本质是对网络拓扑、业务需求与资源约束进行数学抽象,核心挑战是解决路由与频谱分配这一NP-Hard问题,以优化频谱利用率并降低阻塞率。这一过程的技术价值在于将物理网络转化为可计算、可优化的数字孪生,从而支撑精准的投资决策与网络规划。在实际应用中,模型需结合资本支出、运营支出、网络性能及业务收益等多维度指标进行综合价值评估,以量化分析网络升级、新技术引入的投资回报。本文聚焦于光传送网建模,深入探讨了如何通

weixin_30384217的博客 332
上一篇: python中函数的返回值详解
下一篇: python中类成员修饰符
Python热爱者
博客等级 码龄7年 3053粉丝 1330原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值