python对象数据的读写权限

从脚本到平台:利用Python与COM API深度集成dSPACE AutomationDesk 本文详细介绍了如何利用Python与COM API深度集成dSPACE AutomationDesk,实现测试自动化和数据处理的效率提升。通过实战案例展示了批量参数导入、定时任务调度、实时数据监控等高级应用,帮助开发者构建自动化测试流水线并优化性能。 阅读详情

      面向对象的编程语言在写大型程序的的时候,往往比面向过程的语言用起来更方便,安全。其中原因之一在于:类机制。

      类,对众多的数据进行分类,封装,让一个数据对象成为一个完整的个体,贴近现实生活,高度抽象化。但是,python对类的封装并不好,因为所有的属性和方法都是公开的,你可以随意访问或者写入,你可以在类的外部对类的属性进行修改,甚至添加属性。这的确让人感到不安。

      下面就来总结一下学习后的解决方案。


1,使用2个下划线前缀隐藏属性或者方法。 __xxx

#!/usr/bin/python3
#-*- coding:utf-8 -*-


class Student:
    def __init__(self,name,score):
        self.name = name
        self.__score = score  #将score隐藏起来,使之仅在类内部可用。

    def __show(self):        #一个隐藏的方法,同样只在内部可用
        print(self.name,self.__score)#使用被隐藏的属性__score
        
    def Show(self):
        self.__show()       #注意被隐藏方法的调用方式。


    
def main():
    he = Student('Bob',95)
    he.Show()              #显示:Bob 95
    #print(he.__score)     #AttributeError: 'Student' object has no attribute '__score'
    #he.__show()           #AttributeError: 'Student' object has no attribute '__show'

    #隐藏属性真的被隐藏了吗?其实仍然可使用,使用格式  obj._className__attributeName
    #但是仅仅作为了解,不建议使用隐藏属性。
    print(he._Student__show())    #显示:Bob 95
    print(he._Student__score)     # 显示: 95
    
    
    

if __name__=="__main__":
    main()


双下划线对类属性的影响:

1.使属性只用于本类的内部,外部以及子类都不可直接读取修改。

2.使用 _ _ 的类的属性,在实现时会被更改名称,如类中的__age   最后会变为_A__age (名称重整),这个好处是:通常用于涉及到继承的父类中使用。这样避免被子类属性覆盖。






2.创建可管理的属性。

有时候我们需要对属性的写入做额外的检查,对不合法的值拒绝写入,引发异常。


#!/usr/bin/python3
#-*- coding:utf-8 -*-


class Student:
    def __init__(self,name,score):
        self.name = name
        self.score = score  

    @property               #实现属性的读取方法,读取实例的score值时,就会调用这个函数
    def score(self):
        return self.__score

    
    @score.setter          #实现属性写入方法,写入实例的score属性时,调用这个函数
    def score(self,newVal):
        if not isinstance(newVal,(int,float)):
            raise TypeError('score value must be a number')
        if newVal>100 or newVal<0:
            raise ValueError('score value must between 0 and 100')

        self.__score = newVal

    

    
def main():
    he = Student('Bob',95)
    he.score = 100     #重新写入  

    
    print(he.score)    #读取      
        
    

if __name__=="__main__":
    main()


我们可以发现:  self.__score是 属性值 的真正存储的地方,而self.score是函数(只不过它用起来像一个属性),它是获取和写入属性值的方法。

初始化的时候也会调用socre.setter 装饰的函数,因为__init__()函数下出现了self.score的调用


既然self.__score仅仅用来引用属性的值,可不可以用别的命名呢?如saveScore....当然是可以的,但是,它“暴露”了,我们不想让它在外部可用,还是应该

加 __ 将它隐藏,防止意外修改。


有时候,你确定某个类不会涉及到继承,那么,就可以将上述的双下划线改写为单下滑线,虽然不会达到隐藏的作用,但是:一方面,这样不会引发名称重整机制,

避免小题大做,另一面,用一个下划线开头,可以提醒使用者,这个属性不应该直接使用。那么,这就靠自觉了。




一个实例对象可以在外部随意添加属性。

#!/usr/bin/python3
#-*- coding:utf-8 -*-


class Student:
    def __init__(self,name,score):
        self.name = name
        self.score = score  

  

    
def main():
    he = Student('Bob',95)
    he.age = 19
    print(he.age)
    

if __name__=="__main__":
    main()

使用__slots__

#!/usr/bin/python3
#-*- coding:utf-8 -*-


class Student:
    __slots__ = ('name','score') #将属性名以字符串形式加入元组
    def __init__(self,name,score):
        self.name = name
        self.score = score  

  

    
def main():
    he = Student('Bob',95)
    he.age = 19   #AttributeError: 'Student' object has no attribute 'age'
    print(he.age)
    

if __name__=="__main__":
    main()

这样,对象的属性就限定在类的内部了。

但是__slots__不能被继承。而且,__slots__的设计本意并不是上面的用法,而是创建大量(万计)对象时对内存占用进行优化。


总结:

         写着写着,我发觉上面的技巧意义不大。类的设计是程序员本人,使用者也是本人,那么,对象属性的

        读和写就应该自己把握,类设计时本身不需要太多的保护代码,否则会很臃肿,而且效率降低。保护措施应该发生在类的外

        部,让类对象接受到的数据永远是合法的,这样会更加轻巧灵活。这是我的感受。





使用Python学习win32库进行内存读写 前言: 上一周,在52的精华帖中,看到有位大佬用Python制作了鬼泣5的修改器,看完才知道,原来Python也可以对内存进行操作,出于对技术的好奇,看完以后,决定自己也尝试一下。 要用到的工具: CE,Ollybdg, 这次打算用Python,读取这款游戏中,人物的血量。 先打开游戏吧,打开CE,对游戏附加。 输入199在输入框中,先进行一次扫描 接着去打怪,扣血以后在进行一次扫描 等一... 阅读详情

相关推荐

Python创建只读属性对象的方法

通过使用@property装饰器和一个只读属性的getter方法,我们可以将方法转换为只读属性,使其能够像属性一样被访问。这样可以确保属性的值在对象创建后不能被修改,从而保护对象的状态和数据的完整性。在Python中,我们可以通过使用@property装饰器和一个只读属性的getter方法来创建只读属性对象。在Python中,我们经常需要创建只读属性的对象,也就是属性的值不能被修改。通过使用@property装饰器,我们可以将方法转换为只读属性,从而创建只读属性对象。的getter方法转换为只读属性。

UkyzJava的博客 185

Python之权限—对象划分(实例属性&类属性)

Python之权限—对象划分(实例属性&类属性)

m0_46811353的博客 208

14、文件处理、对象序列化和数据持久化

本文详细介绍了Python中文件处理、对象序列化与数据持久化的核心技术,涵盖文本文件的多种访问模式(如r、w、a等)及读写方法(write、writelines、read、readline、readlines),并通过实例演示了配置文件写入和CSV用户数据存储与读取。同时深入讲解了XML文件的结构规范、有效性验证(DTD/XSD)以及四种主流解析方式:MiniDOM、BeautifulSoup、ElementTree和SAX,并结合代码示例展示如何使用MiniDOM解析游客信息。文章还提供了mermaid流

ss78901的博客 60

Python中文件读写基础操作

在处理文件时,另一个需要注意的方面是文件的编码。在Python中,我们通常使用UTF-8编码,这是一种通用的、可变的、无限制的字符编码方式。但是,有些文件可能使用不同的编码方式,这可能会导致读取或写入时出现问题。如果文件使用了不同的编码方式,你可以相应地更改编码方式。语句来自动管理文件的打开和关闭,这样可以确保即使在发生错误的情况下,文件也能被正确地关闭。方法一次读取整个文件的内容,该方法返回一个包含所有行的列表。同样,如果你尝试读取一个你没有读取权限的文件,Python也会抛出。方法来读取文件内容。

weixin_46121540的博客 537

Python 查看文件的读写权限方法

下面小编就为大家分享一篇Python 查看文件的读写权限方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

STM32MP157+AD7606BSTZ四通道IEPE传感器采集方案实战(附完整电路图)

本文详细介绍了基于STM32MP157和AD7606BSTZ的四通道IEPE传感器采集方案,涵盖硬件电路设计、软件驱动开发及系统性能优化。通过精确的恒流源设计和同步采样技术,实现高精度振动信号采集,适用于工业振动监测等应用场景。

weixin_42713608的博客 707

Python面向对象中实现只读属性

在Python面向对象的编程中,实现只读属性通常意味着你希望这个属性可以在类的内部被修改,但一旦对象被创建后,这个属性就不应该被外部直接修改。

sheji888的专栏 651

Ubuntu环境下rknn-toolkit2的安装与兼容性解析

本文详细解析了在Ubuntu系统上安装瑞芯微rknn-toolkit2工具链的完整流程与关键注意事项。文章重点剖析了rknn-toolkit2与旧版rknn-toolkit的核心兼容性问题,强调两者在API、模型格式及运行时库上互不兼容,并推荐使用Conda虚拟环境进行隔离管理,为RK3566、RK3588等开发板的AI模型部署提供清晰的实践指南。

weixin_29041767的博客 377

Python中读写权限设置

Python中读写权限设置(a|w|r) 指令 含义 w 文件不存在时会创建文件;文件存在时清空文件重新写入;不可读 r 文件不存在时不会创建文件;可读不可写; a 文件不存在时会自动创建文件,能写且追加在原文件后面;不可读 w+ 比w多了一个读权限。 r+ 比r多了个写权限,但会覆盖掉原来的文件内容 a+ 比a多了读权限,需要配合f.seek(0)使用,先写f.seek(0)再写f.read() ...

qq_22330765的博客 4469

云安全技术——搭建VPN

VPN(Virtual Private Network)是一种可以在公共网络上建立安全连接的技术。VPN是实现保密通信的基本手段,在windows系统上,可以直接进行VPN服务的搭建。1.VPN的工作原理:通过使用加密协议和认证机制,将本地计算机和远程服务器之间的通信加密和保护。2.VPN的分类:根据不同的方式和用途,VPN可以分为不同类型,例如远程访问VPN、站点到站点VPN等。3.VPN的优势:VPN可以带来许多好处,如提高数据安全性、隐藏真实IP地址、突破地理限制等。4.

qq_53142796的博客 3万+

Python+Appium实现泛微OA自动打卡:5分钟搭建移动端自动化脚本

移动端自动化测试是软件测试与办公自动化领域的重要技术方向,其核心原理是通过程序模拟用户对手机应用界面的操作,实现重复性任务的自动执行。Appium作为主流的开源移动端自动化框架,基于WebDriver协议,支持跨平台且无需修改被测应用,为自动化脚本开发提供了标准化接口。在工程实践中,结合Python简洁的语法和丰富的生态,可以快速构建稳定可靠的自动化解决方案。这一技术组合的价值在于能够高效处理“重复性、低价值、高频率”的日常操作,例如考勤打卡、数据填报等办公场景,显著提升工作效率。本文以泛微OA Emobi

weixin_28836875的博客 391

python类的访问权限_浅谈python对象数据的读写权限

面向对象的编程语言在写大型程序的的时候,往往比面向过程的语言用起来更方便,安全。其中原因之一在于:类机制。类,对众多的数据进行分类,封装,让一个数据对象成为一个完整的个体,贴近现实生活,高度抽象化。但是,python对类的封装并不好,因为所有的属性和方法都是公开的,你可以随意访问或者写入,你可以在类的外部对类的属性进行修改,甚至添加属性。这的确让人感到不安。下面就来总结一下学习后的解决方案。1,使...

weixin_39801158的博客 242

Ansys 19 Mechanical 流体密封分析

start point是一个特殊的概念,在仿真中ansys将从start point开始搜索会发生流体渗漏的点,可以简单理解为从start point开始,向四周逐个节点比较节点上的接触压紧力与流体压力,如果流体压力大于压紧力,则发生渗漏。事实上此处的最后一个参数是指定start point类型的,为1代表这是一个“open”的start point。在通常情况下,如果不人为指定start point,程序会自动寻找指定流体压力面的“边界”,对于二维情况,就是曲线的两个端点,对于三维情况就是曲面的边线。

Dio980的博客 1537

python导入类属性不能用_浅谈python对象数据的读写权限

面向对象的编程语言在写大型程序的的时候,往往比面向过程的语言用起来更方便,安全。其中原因之一在于:类机制。类,对众多的数据进行分类,封装,让一个数据对象成为一个完整的个体,贴近现实生活,高度抽象化。但是,python对类的封装并不好,因为所有的属性和方法都是公开的,你可以随意访问或者写入,你可以在类的外部对类的属性进行修改,甚至添加属性。这的确让人感到不安。下面就来总结一下学习后的解决方案。1,使...

weixin_39967996的博客 200

Ubuntu升级遇到grub-efi-amd64-signed安装失败?3步搞定这个烦人错误

本文深度解析Ubuntu系统升级时grub-efi-amd64-signed安装失败并提示“cannot find EFI directory”错误的根本原因。该错误通常由EFI系统分区挂载异常、BIOS/UEFI引导模式不匹配或dpkg包状态死锁导致。文章提供了三步精准修复流程:首先检查并修复ESP分区挂载,其次处理dpkg依赖问题,最后针对传统BIOS系统提供适配方案,帮助用户安全彻底地解决这一常见升级难题。

r7s8t的博客 400

微信小程序云开发订单微信支付与小票和标签打印的完整高效流程

本片文章全文12000字,细致讲述从申请账户到小程序注册到打印机的选型最后到实现微信小程序云开发订单支付更新与小票,标签打印完整的高效流程。客户A在我们的点餐平台上点了一杯咖啡,所以客户要在选好后付款,在付款完成后商家的小票打印机和标签打印机打印出本订单的相关信息。

weixin_52312427的博客 3651

Python:文件读写,目录函数,数据库操作

本文系统介绍了 Python 在数据存取方面的核心能力,包括文件的读写操作(文本与二进制)、常用的目录与文件管理函数(如 os 和 shutil 模块),以及使用 sqlite3 进行基本数据库操作的方法。

燕双嘤 1543

Sigrity System SI Parallel Bus Analysis模式进行DDR3仿真分析操作指导-单个颗粒

Default Strobe Offset:DQS默认偏移时间,自动填充为0.5ns,即DQS默认偏移1/2UI,DQS滞后于DQ 1/2UI,让建立保持时间均分。WLO:写平衡偏移的数值,DataL是0ps,DataU是500ps,是根据WLOSkew自动定义的,可以认为是WLOSkew取整,也可以根据需要手动调整数值。注意AddCmd的UI=T,这里的Data Rate仍然是DQ的速率,并不是地址线的速率,地址线的速率=1/UI=1/2ns=0.5Gbps。

weixin_54787054的博客 367

Python语言进阶之面向对象编程(类和对象、魔术方法)、文件操作(4-3)

面向过程是一种以过程为中心的编程思想,它先是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,在使用时依次调用,是一种基础的顺序思维方式。面向过程的开发方式是对计算机底层结构的一种抽象,它将程序分为数据和操纵数据的操作两部分,其核心问题是数据结构和算法的开发和优化。常见支持面向过程的编程语言有C、COBOL等。 面向对象是按人们认识客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的办法。面向对象方法把所有事物都当作独立的对象,处理问题的过程中所思考的关

桂林算啦粉的博客 581

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

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

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

数据类型、字符编码、文件处理

标题数据类型、字符编码、文件处理1.数字2. 字符串 1.数字 在python里int为整形 float为浮点型即带小数点的数 #整型int   作用:年纪,等级,身份证号,qq号等整型数字相关   定义:     age=10 #本质age=int(10) #浮点型float   作用:薪资,身高,体重,体质参数等浮点数相关 salary=3000.3 本质salary=float(3000.3...

谢志强 311

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Python学习_基础_27_面向对象编程之封装(隐藏属性、property装饰器)

Python-面对对象编程之封装 一、封装介绍 面向对象编程有三大特性:封装、继承、多态。 封装是面向对象三大特性最核心的一个特性,封装的意思其实就是“整合”。 二、将封装的属性进行隐藏操作 (一)如何隐藏:在属性名前加_ _前缀,就会实现一个对外隐藏属性效果 class Foo: __x = 1 def __f1(self): print('from test') print(Foo.__x) # 报错 print(Foo.__f1) # 报错 该隐藏需要注意的

日拱一卒无有尽,功不唐捐终入海 339

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

用python效率办公_如何用Python提高办公(Excel)效率?

该楼层疑似违规已被系统折叠隐藏此楼查看此楼workBook = xlwt.Workbook(encoding="utf-8") # 创建workBook对象还有一个不常用的属性:压缩等级,直接不写就是默认 0# style_compression 是表示设置压缩的等级workBook = xlwt.Workbook(encoding="utf-8",style_compression=0)创建...

weixin_39886205的博客 147

Python学生管理系统|面向对象+文件存储综合项目

这篇博客介绍了一个使用Python面向对象编程实现的学生信息管理系统。系统主要功能包括:学生信息的增删改查(CRUD)、数据持久化存储(JSON文件)、学号查重校验等。项目采用类封装管理所有功能,通过菜单交互实现核心业务逻辑,适合作为Python课程设计或练手项目。文章提供了完整实现代码,并指出可扩展方向如改用数据库存储、添加统计分析功能等。系统具有结构清晰、功能完整的特点,重点演示了Python面向对象编程和文件操作的实际应用。

2402_87794035的博客 98

python 知识图谱 包_员工知识图谱项目学习( 关于python)

一.Python中所有的类成员(包括数据成员)都是公共的 ,所有的方法都是有效的。只有一个例外:如果你使用的数据成员名称以双下划线前缀 比如__privatevar,Python的名称管理体系会有效地把它作为私有变量。二. 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象:它是类的实例化。方法:类中定义的函数。三.__init__方法的...

weixin_39861905的博客 279

python文件对象及open()函数读写文件详解

**一.文件对象的引入** 有时我们需要把数据永久存储起来,随时使用随时读取。例如,我们通过程序建立的列表、字典等数据,当程序结束时,需要把这些数据存储到文件中,当程序再次启动时,可以把这些数据读入到程序中,避免这些数据的重新录入。要实现上面的功能,我们该怎么做呢? 要把列表、字典等数据永久存储起来,就需要用到文件。文件一般都存储在磁盘中,电脑中存储的图片、资料、音视频等都...

u013766836的博客 7967
上一篇: 栈和堆的区别
下一篇: python 之 utf-8编码的秘密
love1code
博客等级 码龄12年 19粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值