proprety详解
property() 函数和@property修饰符。
第一种方法,使用property() 函数:
class Person:
def __init__(self):
self.__name= None #这是setter方法
def setName(self,name):
self.__name=name #这是getter方法
def getName(self ):
return self.__name name_value=property(getName,setName) #名字可以随便去,这里使用name_value是为了直观,直接用一个n命名更简单 p = Person() #实例化
p.name_value = 'chb' #直接赋值,这行代码等同于 p.setName('chb')
n = p.name_value #直接读取数据 ,等同于使用 p.getName()
print(n) #输出结果:chb
这种方法就是在写好了setteer和getter后,加上一句property函数赋值代码。property函数结构为property(fget=None,fset=None,fdel=None,doc=None),可以看出property可以再一个deleter,上面代码中没有加。如果加上,deleter写法代码如下:
#这是deleter
def delName(self):
del self.__name
然后property赋值语句变为:
name_value=property(getName,setName,delName)
使用方法为:
del p.name_value
print(p.name_value) #运行会出错
这种方法的好处是你可以按照原来的方法写getter和setter,连getter和setter的函数名都可以不用改,只需要写完getter和setter是加一条property赋值语句。
第二种方法,使用@property修饰符:
class Person:
def __init__(self):
self.__name= None @property #property修饰符
def name_value(self ):#这是getter,getter必须写在setter前面,且函数名变成property修饰符名
return self.__name @name_value.setter
def name_value(self,name):#这是setter,setteer的函数名跟getter一样,必须为property修饰符名
self.__name=name @name_value.deleter #这是deleter,函数名同上
def name_value(self):
del self.__name p = Person()
p.name_value = 'chb'
n = p.name_value
print(n)
del p.name_value
print(p.name_value) #这条代码运行会出错
第二种方法的getter必须写在setter和deleter的最前面,且getter、setter、deleter使用同一个函数名,否则会出错。
有的时候,为了不让修改属性,即将属性设置为只读,我们什么可以只写getter方法,property函数只写第一个参数即可。
总结:作为自己的加分项目把
proprety详解的更多相关文章
- Java 反射详解 转载
java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ...
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)
一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Java 字符串格式化详解
Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- Git初探--笔记整理和Git命令详解
几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
- Node.js npm 详解
一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...
随机推荐
- 初次接触软构和git(使用eclipse)
目录: 一.git和github 二.软件构造lab1常见问题(eclipse) 一.git和github 1. git的安装 百度git然后去官网安装即可,不会的可以去百度查一下. 2. git和g ...
- redis 配置哨兵模式时出现的问题(redis 版本 6.2.5)
今天准备搭建一个 redis 集群(redis 版本 6.2.5),在这之前要先配置好哨兵模式. 但是在配置哨兵模式时出现了问题.之前没有搭建集群时(一主两从,三台虚拟机)可以顺利配置好,而搭建集群时 ...
- C#基于数据库链接增删改查
一.创建一个winfrom窗体 1.创建项目 2.创建一个链接数据的类 3.封装数据库的实体类(查询和增加) 在对数据操作时必须引用连个数据库using using System.Data; usin ...
- 如何跳出forEach循环
for(let ii in this.listData){ console.log("提交前数据",ii) try{ this.listData[ii].forEach((el,i ...
- SSD目标检测网络解读(含网络结构和内容解读)
SSD实现思路 SSD具有如下主要特点: 从YOLO中继承了将detection转化为regression的思路,一次完成目标定位与分类 基于Faster RCNN中的Anchor,提出了相似的Pri ...
- raft算法,cap理论中的c是数据一致性,是通过raft算法,
raft算法中的两个重要概念,自旋时间,心跳时间, 领导,候选人,随从,通过日志同步.只要大多数随从同步成功,就算成功.
- 【node打包缺包】Error: Can't walk dependency graph: Cannot find module 'jquery' from
问题: 在使用node打包时,终端报错提示Error: Can't walk dependency graph: Cannot find module 'jquery' from/.../ 这个提示缺 ...
- 【随笔】Java处理异常输出对象Exception,转为String输出
声明:这段代码也是从网上摘抄的,当时忘记记录地址了,此为转载,勿怪 public static String handleException(Exception e) { StringBuffer m ...
- C# DataGridView 新增列 新增行 操作函数 - [ 自律相互分享,共促一起进步 - 社会的正常运维就这么简单,何以权,何以钱...- 张光荣2010年谈社会改正提出的正能量]
功能: 一.列相关: 1.追加列,左插列,右插列, 2.删除列 二.行相关: 1.追加行,上插行,下插行 2.删除行,删除所有空行,清空所有数据... 原理:根据对鼠标于 DataGridView 点 ...
- 图的基本操作 (c语言)
图的基本操作:创建 删除 遍历 创建:邻接矩阵和邻接表 十字链表 下面代码是邻接矩阵的定义和邻接表的创建 遍历:深度优先遍历(一条路走到黑) 广度优先遍历(树的层次遍历) 具体代码: #include ...