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详解的更多相关文章

  1. Java 反射详解 转载

    java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实例化Class类对象 ...

  2. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  3. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  4. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  5. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  6. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  7. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  8. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

  9. Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)

    Android XML shape 标签使用详解   一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...

  10. Node.js npm 详解

    一.npm简介 安装npm请阅读我之前的文章Hello Node中npm安装那一部分,不过只介绍了linux平台,如果是其它平台,有前辈写了更加详细的介绍. npm的全称:Node Package M ...

随机推荐

  1. 从xml读取gps数据获取经纬高

    #!/usr/bin/python # -*- coding: UTF-8 -*- from xml.dom.minidom import parse import xml.dom.minidom & ...

  2. thymeleaf依赖

    <!--thymeleaf模板--> <dependency> <groupId>org.thymeleaf</groupId> <artifac ...

  3. PLC入门笔记9

    梯形图电路之电机控制 电机直接启动控制电路 电机正反停控制电路 我的图.. 但愿最后说的不要发生吧 例如下错了程序 导致... 最好外部电路互锁一下.. 电机故障判断电路 我的图.. 电机故障转换电路 ...

  4. js下载流文件

    npm install js-file-download --savenpm install axios --save import axios from "axios"; imp ...

  5. (六).JavaScript的数组(2)

    1.10 作用域链 定义: 作用域链:查找变量的过程 作用: 查找变量 查找规则:首先会在自身作用域找变量,找到就用 如果没有,就去上级作用域查找,找到就用 如果没有,一直往上找,直到全局作用域,有就 ...

  6. 源代码管理工具-Github

    一.实验目的 个人编程:每个开发人员电脑上有自己的代码.硬盘坏了,所有的数据和资料不能找回或是很难复原.安全意识强一些的公司会要求开发人员将代码隔一段时间放到一个集中的计算机上,以日期为文件夹进行备份 ...

  7. 什么是序列化?实体类为什么要实现序列化接口?实体类为什么要指定SerialversionUID?

    首先我们说答案:实体类对象在保存在内存中的,而对于web应用程序而言,很多客户端会对服务器后台提交数据请求,如得到某种类型的商品,此时后台程序会从数据库中读取符合条件的记录,并它们打包成对象的集合,再 ...

  8. 标题Ubuntu将默认的python3改为默认的python

    ryzen@cp7:~$ python Command 'python' not found, did you mean: command 'python3' from deb python3 roo ...

  9. SSH、SFTP、FTP、Telnet、SCP、TFTP协议的原理

    一.SSH协议1.什么是SSH?SSH全称 安全外壳协议(Secure Shell),,是一种加密的网络传输协议,可在不安全的网络中为网络服务提供安全的传输环境. 如果一个用户从本地计算机,使用SSH ...

  10. Class 'dmstr\web\AdminLteAsset' not found

    Yii2出现  Class 'dmstr\web\AdminLteAsset' not found 报错 1.检查下是不是vendor从其他地方复制过来的 2.检查根目录composer.json 中 ...