property使用简介

by:授客 QQ:1033553122

功能简介

1) 把类方法变成只读属性

2) setter和getter的另一种实现

代码演示1

#!/usr/bin/env python

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

 

__author__ = 'shouke'

 

class User(object):

def __init__(self, username, password):

self._username =  username

self._password = password

@property

 def username(self):

 return self._username

@username.setter

def username(self, username):

self._username = username

@property

def password(self):

return self._password

@password.setter

def password(self, password):

self._password = password

if __name__ == '__main__':

boy = User('shouke', 'shouke2014')

print('对象用户名:', boy.username)

boy.username = 'shou ke'

print('修改后的用户名:', boy.username)

print('通过修改属性值来修改密码')

boy._password = 2014

print('修改后的用户密码:', boy._password)

boy.password = 'shouke2016'

print('通过方法属性来修改密码,修改后的用户密码:', boy._password)

运行结果:

对象用户名: shouke

修改后的用户名: shou ke

通过修改属性值来修改密码

修改后的用户密码: 2014

通过方法属性来修改密码,修改后的用户密码: shouke2016

注意:

1、@property和@function.setter需要成对使用,如下

@property

def function_name

@function.setter

def function_name(self, attribute)

2、如果变量属性值和方法属性值相同,那么以下情况下是无法完成初始化函数 __init__ 中的赋值操作的,即无法初始化对象

代码演示2

#!/usr/bin/env python
#
-*- coding:utf-8 -*-


__author__
=
'shouke'


class

Tester(object):
    def

__init__(self,
name, sex, title):
        self.name
= name
        self.sex
= sex
        self.title
= title

@property
    def

name(self):
        return

self.name

@property
    def

sex(self):
        return
 
self.sex

@property
    def

title(self):
        return

self.title

@title.setter
    def

title(self,

title):
        self.title
=
title

if

__name__ ==
'__main__'
:
    tester
= Tester('shouke',

'M'
,

'Tester'
)
    print(tester.title)

"D:\Program
Files\python33\python.exe" E:/Projects/untitled/py1.py

Traceback (most recent call last):

File
"E:/Projects/untitled/py1.py", line 30, in

tester
= Tester('shouke', 'M', 'Tester')

File
"E:/Projects/untitled/py1.py", line 8, in __init__

self.name
= name

AttributeError: can't set attribute

最新文章

  1. Codeforces Round #388 (Div. 2)
  2. Tomcat8安装, 安全配置与性能优化
  3. Android Junit测试框架
  4. NUI控件扩展
  5. [Error] Error parsing XML: unbound prefix
  6. LIST动态表格画线(动态列)
  7. 注解配置springMvc及向作用域中赋值
  8. 【转】PHP 之 CURL 模拟登陆并获取数据
  9. perl编程中的map函数示例
  10. 我的Modbus Slave/Client开发历程(Rtu/AscII/Tcp)
  11. 四、XML映射配置文件
  12. 《SDN核心技术剖析和实战指南》3.1控制器核心技术读书笔记
  13. HDU 1201
  14. Vue不能检测数组或对象变动问题的解决
  15. 浅谈Pool对象
  16. keil5一点project就闪退
  17. 【ZJOI2012】灾难
  18. java 分隔函数split("",-1)的用途
  19. Oracle根据【日期】组,其他条件根据PIVOT行转列。使每个日期条件关联的其他数据只有一行。
  20. 直接存储器存取(Direct Memory Access,DMA)详细讲解

热门文章

  1. 部署 HTTPS 访问 ( https:// )
  2. 转转RN工程化历程
  3. excel表格中打开可以显示整个表格但是打印却只能打印一个单元格
  4. mysql 开发进阶篇系列 13 锁问题(关于表锁,死锁示例,锁等待设置)
  5. mysql 开发基础系列11 存储引擎memory和merge介绍
  6. Android--UI之GridView
  7. CentOS5/6/7系统下搭建安装Amabari大数据集群时出现SSLError: Failed to connect. Please check openssl library versions.错误的解决办法(图文详解)
  8. SpringCloud学习5-如何创建一个服务提供者provider
  9. Python中编码和字符串
  10. 微软改名部又出动啦!微软宣布VSTS改名为Azure DevOps