Python使用@property方法改变方法为参数
回归基础,学习了一波 使用@property 加上了很多自己慢慢的摸索
class Test(object):def __init__(self):self.__A = 1def changeA(self, value):self.__A = valuedef getA(self):return self.__A@propertydef A(self):return self.__A@A.setterdef A(self, value):self.__A = value@A.getterdef A(self):return self.__A
上面构造出来的类,实现了将一个类变成元素的方法。这句话很抽象,但是当你看了下面的使用的时候,你就会发现了,其实很简单
t = Test()
t.changeA(2)
t.A = 3
在上面的测试代码中,我是实例化了一个Test类。然后第一步是用了一个public的函数changeA()
。使用这个函数,当然很容易就知道了会改变了实例化对象的__A元素。
但是由于上面用了@property
所以可以直接用。也就是说,在t.A = 3
这句话结束的时候就知道了,t.__A
其实被改成了3了。
为了验证,我们做下面的输出
print(t.A)
print(t.getA())
输出的结果是:
3
3
其实这里A也可以直接指向了这个类的私有变量__A
了。同时对这个变量进行了修改。
可能有些搞笑。但是,我们这里实现了将一个__A
这个私有变量变成了一个公有的变量A
。
这里的核心就再之前的那里用了,@property
会将对应的函数变成变量。这看起来有点好玩。不过,我们还可以进一步的试一下~
- 我们将之前的类保持不变,但是我们改变那个测试函数。
变成下面的这样子~
t = Test()
print(t.A)
print(t.getA())
输出是
1
1
看到了没有,同样都是函数(A 和 getA),但是为了输出self.__A,前者直接就像元素一般直接溜了,但是后者,却还要用去调用。
如果直接用 t.A()
TypeError: ‘int’ object is not callable
就会有这样的错误。我写过一篇关于tuple
的文章,里面也是解决了这个问题的。点这可以看这个文章
2. 再改改这个测试函数, 但是我们把那个 类的后面的两个函数(就是后面两个有装饰器的) 先注释掉
t = Test()
t.A = 2
就会报下面的错误了
AttributeError: can’t set attribute
这个是可以理解的,因为,这里t.A
其实 返回的是self.__A的实体,但是这个实体确实是没有办法改~ 所以也就没能set。
但是有趣的是,可能是我python解释器的原因,我是可以直接使用下面这样的语句的。哈哈哈,简直有毒,反而封装之后的元素是变成了真正的私有变量。
t.__A = 2
print(t.__A)
- 看到上面的这一个,其实就大概可以猜测出来我要干嘛了~
我把类改写成这个样子~
class Test(object):def __init__(self):self.__A = 1@propertydef _A(self):return self.__A
然后,我的测试函数是:
t = Test()
print(t._A)
这样,我就实现了一个只能看不能改的私有变量。而且在我的IDE(Pycharm中使用是看不到原来那个__A,但是可以看到这个。这样看来,这个类就是实现了一个可以被看到的私有变量了~ 真刺激~)
Python使用@property方法改变方法为参数相关推荐
- python中改变参数值的方法_Python实现partial改变方法默认参数
Python实现partial改变方法默认参数 时间:2020-11-18 06:19:00 作者:背锅熊 阅读:114次撤稿申请 下边就看下简易的运用检测案例.实际编码以下:#!/usr/bin/e ...
- python中property方法有用_python中@property和property函数常见使用方法示例
本文实例讲述了python中@property和property函数常见使用方法.分享给大家供大家参考,具体如下: 1.基本的@property使用,可以把函数当做属性用 class Person(o ...
- python中drop用法_Python drop方法删除列之inplace参数实例
drop方法有一个可选参数inplace,表明可对原数组作出修改并返回一个新数组.不管参数默认为False还是设置为True,原数组的内存值是不会改变的,区别在于原数组的内容是否直接被修改.默认为Fa ...
- python drop删除多列_Python drop方法删除列之inplace参数实例
drop方法有一个可选参数inplace,表明可对原数组作出修改并返回一个新数组.不管参数默认为False还是设置为True,原数组的内存值是不会改变的,区别在于原数组的内容是否直接被修改.默认为Fa ...
- 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传 ...
- python的实例类方法、修饰器类方法、修饰器保护方法、修饰器静态方法中私有属性的区别和自定义property的读写方法
class Cla:__count=0def __init__(self,v):self.__value=vCla.__count+=1def show(self):print('普通实例方法访问私有 ...
- Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析
Python使用property函数和使用@property装饰器都能定义属性的get.set及delete的访问方法,他们的相同点主要如下三点: 1.定义这些方法后,代码中对相关属性的访问实际上都会 ...
- python查看某个函数方法具体有哪些参数怎么做
一.目标确立 我想知道python的某个函数方法具体有哪些参数 二.实现步骤 (1)在jupyter notebook中查看某个函数方法具体有哪些参数: 调用help()函数,如:我想知道pandas ...
- python字符串format方法参数解释,一文秒懂!Python字符串格式化之format方法详解
一文秒懂!Python字符串格式化之format方法详解 一文秒懂!Python字符串格式化之format方法详解 format是字符串内嵌的一个方法,用于格式化字符串.以大括号{}来标明被替换的字符 ...
最新文章
- informix clob转oracle 乱码_Oracle 视图-序列-权限-表-事务
- C#中数据流(文件流、内存流、网络流等)相关知识点梳理
- android php 推送,php-Android通过Firebase推送通知(服务器端)
- 从网管做到CIO---看如何提升IT人员职业价值
- iOS UITableView设置UITableViewStyleGrouped模式下section间多余间距的处理
- HAproxy负载均衡部署
- 拓端tecdat|R语言用Hessian-free 、Nelder-Mead优化方法对数据进行参数估计
- html电子名片,HTML5 精美的双面电子名片
- 数据压缩作业:清音、浊音、爆破音频谱分析
- 22.信息系统安全管理-策略7定.方案.安全体系架构.PKI.PMI
- 对象存储只能按文件名搜索,你out了吧
- 武林高手?敏捷开发,唯velocity取胜
- 组织敏捷程序:第2部分,用于管理敏捷程序的网络
- 基于多线程技术和自定义消息编程实现Windows 9x异步串行通信
- pyecharts 世界地图国家中英文对照表
- 十三、MySQL数据库
- Google Chrome 66 稳定版更新:修复四大严重安全漏洞
- python的读后感_《笨办法学python》读后感
- linux bridge 添加fdb,bridge fdb 与vxlan
- Android 重装系统之小米系统
热门文章
- 我这些年的项目管理心得...
- swift 基础学习之属性修饰符
- Spring MVC 教程,快速入门,深入分析——多视图控制器
- Markdown中常用的转义字符
- 【数据平台】Pytorch库初识
- 2019ICCV论文 Non-Local ConvLSTM for Video Compression Artifact Reductio
- 计算机网络英语求职简历翻译,计算机网络求职英文简历模板.doc
- Ajax 请求超时与网络异常
- Vue指令之v-on的缩写和事件修饰符||.stop 和 .self 的区别
- bugku 成绩单 sqlmap工具的爆破