回归基础,学习了一波 使用@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 会将对应的函数变成变量。这看起来有点好玩。不过,我们还可以进一步的试一下~

  1. 我们将之前的类保持不变,但是我们改变那个测试函数。
    变成下面的这样子~
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)
  1. 看到上面的这一个,其实就大概可以猜测出来我要干嘛了~
    我把类改写成这个样子~
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方法改变方法为参数相关推荐

  1. python中改变参数值的方法_Python实现partial改变方法默认参数

    Python实现partial改变方法默认参数 时间:2020-11-18 06:19:00 作者:背锅熊 阅读:114次撤稿申请 下边就看下简易的运用检测案例.实际编码以下:#!/usr/bin/e ...

  2. python中property方法有用_python中@property和property函数常见使用方法示例

    本文实例讲述了python中@property和property函数常见使用方法.分享给大家供大家参考,具体如下: 1.基本的@property使用,可以把函数当做属性用 class Person(o ...

  3. python中drop用法_Python drop方法删除列之inplace参数实例

    drop方法有一个可选参数inplace,表明可对原数组作出修改并返回一个新数组.不管参数默认为False还是设置为True,原数组的内存值是不会改变的,区别在于原数组的内容是否直接被修改.默认为Fa ...

  4. python drop删除多列_Python drop方法删除列之inplace参数实例

    drop方法有一个可选参数inplace,表明可对原数组作出修改并返回一个新数组.不管参数默认为False还是设置为True,原数组的内存值是不会改变的,区别在于原数组的内容是否直接被修改.默认为Fa ...

  5. 当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.

    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递 答:是值传递.Java 编程语言只有值传递参数.当一个对象实例作为一个参数被传 ...

  6. python的实例类方法、修饰器类方法、修饰器保护方法、修饰器静态方法中私有属性的区别和自定义property的读写方法

    class Cla:__count=0def __init__(self,v):self.__value=vCla.__count+=1def show(self):print('普通实例方法访问私有 ...

  7. Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析

    Python使用property函数和使用@property装饰器都能定义属性的get.set及delete的访问方法,他们的相同点主要如下三点: 1.定义这些方法后,代码中对相关属性的访问实际上都会 ...

  8. python查看某个函数方法具体有哪些参数怎么做

    一.目标确立 我想知道python的某个函数方法具体有哪些参数 二.实现步骤 (1)在jupyter notebook中查看某个函数方法具体有哪些参数: 调用help()函数,如:我想知道pandas ...

  9. python字符串format方法参数解释,一文秒懂!Python字符串格式化之format方法详解

    一文秒懂!Python字符串格式化之format方法详解 一文秒懂!Python字符串格式化之format方法详解 format是字符串内嵌的一个方法,用于格式化字符串.以大括号{}来标明被替换的字符 ...

最新文章

  1. informix clob转oracle 乱码_Oracle 视图-序列-权限-表-事务
  2. C#中数据流(文件流、内存流、网络流等)相关知识点梳理
  3. android php 推送,php-Android通过Firebase推送通知(服务器端)
  4. 从网管做到CIO---看如何提升IT人员职业价值
  5. iOS UITableView设置UITableViewStyleGrouped模式下section间多余间距的处理
  6. HAproxy负载均衡部署
  7. 拓端tecdat|R语言用Hessian-free 、Nelder-Mead优化方法对数据进行参数估计
  8. html电子名片,HTML5 精美的双面电子名片
  9. 数据压缩作业:清音、浊音、爆破音频谱分析
  10. 22.信息系统安全管理-策略7定.方案.安全体系架构.PKI.PMI
  11. 对象存储只能按文件名搜索,你out了吧
  12. 武林高手?敏捷开发,唯velocity取胜
  13. 组织敏捷程序:第2部分,用于管理敏捷程序的网络
  14. 基于多线程技术和自定义消息编程实现Windows 9x异步串行通信
  15. pyecharts 世界地图国家中英文对照表
  16. 十三、MySQL数据库
  17. Google Chrome 66 稳定版更新:修复四大严重安全漏洞
  18. python的读后感_《笨办法学python》读后感
  19. linux bridge 添加fdb,bridge fdb 与vxlan
  20. Android 重装系统之小米系统

热门文章

  1. 我这些年的项目管理心得...
  2. swift 基础学习之属性修饰符
  3. Spring MVC 教程,快速入门,深入分析——多视图控制器
  4. Markdown中常用的转义字符
  5. 【数据平台】Pytorch库初识
  6. 2019ICCV论文 Non-Local ConvLSTM for Video Compression Artifact Reductio
  7. 计算机网络英语求职简历翻译,计算机网络求职英文简历模板.doc
  8. Ajax 请求超时与网络异常
  9. Vue指令之v-on的缩写和事件修饰符||.stop 和 .self 的区别
  10. bugku 成绩单 sqlmap工具的爆破