直奔主题

使用中文注释需要使用

#-*-coding:utf-8-*-

property

property在python中有2中使用property方法:
1.@property @属性名称.setter @属性名称.deleter
2.使用property(fget, fset, fdel, doc)指定

1.使用装饰器@property
要求:(1)所用的类为新式类,在python3版本以上默认为新式类,或者是是直接或间接继承object的类
(2)定义的函数名称必须要是名称名(如属性名是name,那函数名称就为name,不能为其他的。详情看例子)

class Demo(object):
def __init__(self):
print("这是构造函数")
self._name = None @property
def name(self):
return self._name #这是属性get的方法 @name.setter
def name(self, value):#这是属性set的方法
self._name = value @name.deleter
def name(self):
print("this is the method of delete")
self._name = None if __name__ == "__main__":
testDemo = Demo()
print(testDemo.name)
testDemo.name = "name"
print(testDemo.name)
del testDemo.name

以下是结果:

#======以下是结果========
这是构造函数
None
name
this is the method of delete

2.使用property()方法 property(fget,fset,fdel,doc)
要求:(1)所用的类为新式类,在python3版本以上默认为新式类,或者是是直接或间接继承object的类

class Demo2(object):
def __init__(self):
print("这是构造函数")
self._value = None def getValue(self):#这是属性value的get方法
print("getting the value of property")
return self._value def setValue(self, value):#这是属性value的set方法
print("setting the value of property")
self._value = value def delValue(self):#这是属性value删除方法
print("this is the method of delete")
self._value = None value = property(fget=getValue, fset=setValue, fdel=delValue, doc="this is a message about the property of value") if __name__ == "__main__":
testDemo = Demo2()
print(testDemo.value)
testDemo.value = "name"
print("print the value of property:",testDemo.value)
del testDemo.value

以下是结果:

#======以下是结果========
这是构造函数
getting the value of property
None
setting the value of property
getting the value of property
('print the value of property:', 'name')
this is the method of delete

使用属性property2种方法存放多个值的例子

1.使用装饰器@property进行设置 属性含有多个值

class Demo4(object):
def __init__(self):
print("这是构造函数")
self._value1 = None
self._value2 = None @property
def values(self):
return self._value1, self._value2 #这是属性get的方法 @values.setter
def values(self, values):#这是属性set的方法
self._value1, self._value2 = values @values.deleter
def values(self):
print("this is the method of delete")
self._value1 = None
self._value2 = None if __name__ == "__main__":
testDemo = Demo4()
print(testDemo.values)
testDemo.values = "name","helloworld"
print("print the value of property:", testDemo.values)
del testDemo.values

以下是结果:

#======以下是结果========
这是构造函数
(None, None)
('print the value of property:', ('name', 'helloworld'))
this is the method of delete

2.property(fget, fset, fdel, doc)方法设置  属性含有多个值

class Demo3(object):
def __init__(self):
print("这是构造函数")
self._value = None
self._value2 = None def getoValue(self): # 这是属性value的get方法
print("getting the value of property")
return self._value, self._value2 def setoValue(self, values): # 这是属性value的set方法
print("setting the value of property")
self._value, self._value2 = values def deloValue(self): # 这是属性value删除方法
print("this is the method of delete")
self._value = None values = property(fget=getoValue, fset=setoValue, fdel=deloValue, doc="this is a message about the property of values") if __name__ == "__main__":
testDemo = Demo3()
print(testDemo.values)
testDemo.values = "name","helloworld"
print("print the value of property:", testDemo.values)
del testDemo.values

以下是结果:

这是构造函数
getting the value of property
(None, None)
setting the value of property
getting the value of property
('print the value of property:', ('name', 'helloworld'))
this is the method of delete

getter和setter

getter和setter 是在对象上动态的增加属性

if __name__ == "__main__":
testDemo = Demo2() print([n for n in dir(testDemo) if n[0] is not "_"])
setattr(testDemo, "newMethod", "hellworld")
print([n for n in dir(testDemo) if n[0] is not "_"])
value = getattr(testDemo, "newMethod")
print(value)
#使用getattr获取一个不存在的属性,如果属性不存在,则返回一个默认的值
value = getattr(testDemo, "yoyo", "the value is not exist!")
print(value)

以下是结果:

#======以下是结果========
这是构造函数
['delValue', 'getValue', 'setValue', 'value']
['delValue', 'getValue', 'newMethod', 'setValue', 'value']
hellworld
the value is not exist!

python 属性 property、getattr()、setattr()详解的更多相关文章

  1. Python中的getattr()函数详解

    最近看Dive into python第四章自省中提到getattr()函数,作为一个内建函数平时自己没怎么用过所以也不太理解这个函数的一些用法 看了下函数本身的doc getattr(object, ...

  2. 【转】Python的hasattr() getattr() setattr() 函数使用方法详解

    Python的hasattr() getattr() setattr() 函数使用方法详解 hasattr(object, name)判断一个对象里面是否有name属性或者name方法,返回BOOL值 ...

  3. Python包模块化调用方式详解

    Python包模块化调用方式详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一般来说,编程语言中,库.包.模块是同一种概念,是代码组织方式. Python中只有一种模块对象类型 ...

  4. 【Python】Python内置函数dir详解

    1.命令介绍 最近学习并使用了一个python的内置函数dir,首先help一下: 复制代码代码如下: >>> help(dir)Help on built-in function ...

  5. Python API 操作Hadoop hdfs详解

    1:安装 由于是windows环境(linux其实也一样),只要有pip或者setup_install安装起来都是很方便的 >pip install hdfs 2:Client——创建集群连接 ...

  6. python设计模式之装饰器详解(三)

    python的装饰器使用是python语言一个非常重要的部分,装饰器是程序设计模式中装饰模式的具体化,python提供了特殊的语法糖可以非常方便的实现装饰模式. 系列文章 python设计模式之单例模 ...

  7. Python调用windows下DLL详解

    Python调用windows下DLL详解 - ctypes库的使用 2014年09月05日 16:05:44 阅读数:6942 在python中某些时候需要C做效率上的补充,在实际应用中,需要做部分 ...

  8. Python安装、配置图文详解(转载)

    Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境(I ...

  9. 【和我一起学python吧】Python安装、配置图文详解

     Python安装.配置图文详解 目录: 一. Python简介 二. 安装python 1. 在windows下安装 2. 在Linux下安装 三. 在windows下配置python集成开发环境( ...

  10. Python中的高级数据结构详解

    这篇文章主要介绍了Python中的高级数据结构详解,本文讲解了Collection.Array.Heapq.Bisect.Weakref.Copy以及Pprint这些数据结构的用法,需要的朋友可以参考 ...

随机推荐

  1. 【树链剖分】【树状数组】【最近公共祖先】【块状树】bzoj3631 [JLOI2014]松鼠的新家

    裸题,树状数组区间修改+单点查询.当然要稍微讨论一下链的左右端点是否修改的情况咯. #include<cstdio> #include<algorithm> #include& ...

  2. 【KMP】BZOJ3670-[Noi2014]动物园

    [题目大意][依然借用别人的概括]给定一个长为L的字符串(L<=100W),求一个num数组,num[i]表示长度为i的前缀中字符串S’的数量,其中S‘既是该前缀的前缀也是该前缀的后缀,且|S' ...

  3. 7.1(java学习笔记)InetAddress&InetScoketAddress

    一.InetAddress 这个类主要表示IP地址.InetAddress封装了IP地址和域名.域名可以看做IP地址的一个别称,起这个别称的目的是为了便于记忆. 例如www.baidu.com 就是1 ...

  4. codevs 4163 求逆序对的数目 -树状数组法

    4163 hzwer与逆序对  时间限制: 10 s  空间限制: 256000 KB  题目等级 : 黄金 Gold 题目描述 Description hzwer在研究逆序对. 对于数列{a},如果 ...

  5. Java高级架构师(一)第25节:实现前端的业务登录等功能

    package com.sishuok.architecture1; import javax.servlet.http.Cookie; import javax.servlet.http.HttpS ...

  6. Android 架构 2.界面

    其中,最上层的界面,是变化最频繁的一个层面,也是最复杂最容易出问题的一个层面,如果规划不好,很容易做着做着,又乱成一团了.要规划好界面层,至少应该遵循几条基本的原则: 保持规范性:定义好开发规范,包括 ...

  7. 百度display name为中文导致奔溃,productName和budlename区分出来

    把"xxx-info.plist"中的"Bundle display name"的值改成了英文,或者把它的值修改成系统默认的"${PRODUCT_NA ...

  8. WebService authentication

    http://blog.csdn.net/largestone_187/article/details/5734632 通过SoapHeader对用户口令进行验证,只有授权的用户才可以使用接口.确保了 ...

  9. Redis设置使用几号库

    Redis中SpringBoot项目中的配置: 1.引入 spring-boot-starter-redis(POM.XML) <dependency> <groupId>or ...

  10. postgres访问认证配置文件pg_hba.conf

    pg_hba.conf(默认位于/var/lib/pgsql/10/data/pg_hba.conf)是设置访问认证的主要文件,格式为每条记录一行,每行指定一条访问认证. 设定一条访问认证包含了5个部 ...