Python内置函数property()使用实例

class Shuxing():
    def __init__(self, size = 10):
        self.size = size
    def getSize(self):
        print('getSize')
        return self.size
    def setSize(self, value):
        print('setSize')
        self.size = value
    def delSize(self):
        print('delSize')
        del self.size
    x = property(getSize, setSize, delSize)

sx=Shuxing(100)
print('1',sx.x)    #获取x,执行getSize方法
sx.x=1000     #设置x,执行setSize方法
print('2',sx.x)     #获取x,执行getSize方法
del sx.x    # 删除x,执行delSize方法

print('3',sx.size)     # 获取x,执行getSize方法,但是此时size已被删除,所以会报错 

结果:

getSize
1 100
Traceback (most recent call last):
setSize
getSize
  File "D:/PycharmProjects/flask_demo/a.py", line 21, in <module>
2 1000
delSize
    print('3',sx.size)
AttributeError: 'Shuxing' object has no attribute 'size'

Process finished with exit code 1

property()函数中的三个函数分别对应的是获取属性的方法、设置属性的方法以及删除属性的方法,这样一来,外部的对象就可以通过访问x的方式,来达到获取、设置或删除属性的目的。 当需要更改上例中的getSize、setSize或delSize函数的名称时,如果这些方法是作为接口让用户调用的,那么对用户而言就要修改自己调用的方法名,很麻烦,使用了proprty()后,用户就不需担心这种问题了。 更多关于属性的内置方法有: hasattr():判断对象中是否有指定名称的属性,第一个参数是对象,第二个参数是字符串(属性名称); getattr():获取对象中指定的属性的值,如果属性不存在,返回指定的提示字符串,第一个参数是对象,第二参数是字符串(属性名称),第三个参数是字符串(访问的属性不存在时的提示); setattr():设置对象中指定的属性的值,如果属性不存在,就自动为对象添加该属性并赋值,第一个参数是对象,第二个参数字符串(属性名称),第三个参数是需要设置的属性对应的值; delattr():删除对象中指定的属性,第一个参数是对象,第二个参数需要删除的指定属性的名称。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C++

python笔记:#011#循环

1782
来自专栏web前端教室

web前端零基础课-0908*福祥-学习笔记

学了部分js内容后,完成了网站首页部分动态效果(搜索栏、侧边导航条、轮播图),先用最基本的,冗余最多的一步步实现;后面对Js进行了初步的封装,重新构建了Js文件...

833
来自专栏Java帮帮-微信公众号-技术文章全总结

JavaWeb03-轻松理解JS(Java真正的全栈开发)

? 一.js常用对象 ljs中的常见对象有以下几个: Boolean Number String Array 数组 Date 日期 Math 数学 RegEx...

28312
来自专栏章鱼的慢慢技术路

用Go语言实现一个简单的聊天机器人

Go语言基本构成要素:标识符、关键字、字面量、分隔符、操作符。它们可以组成各种表达式和语句,而后者都无需以分号结尾。

1172
来自专栏技术之路

golang 详解defer

什么是defer defer用来声明一个延迟函数,把这个函数放入到一个栈上, 当外部的包含方法return之前,返回参数到调用方法之前调用,也可以说是运行到最外...

2777
来自专栏葡萄城控件技术团队

JavaScript 开发人员需要知道的简写技巧

1303
来自专栏漫漫前端路

从 Vue typings 看 “this”

在 2.5.0 版本中,Vue 大大改进了类型声明系统以更好地使用默认的基于对象的 API。

972
来自专栏西安-晁州

golang学习之defer

golang中的defer通常用于执行一些资源释放性操作,比如open/close、connect/disconnect、lock/unlock等,对defer...

2060
来自专栏Golang语言社区

Golang语言社区--Go语言基础第四节类型

大家好,我是Golang语言社区主编彬哥,这节给大家讲解Go语言中的类型。

4475
来自专栏个人随笔

JavaScript 网页脚本语言 由浅入深

1)基础 学习目的: 1. 客户端表单验证 2. 页面动态效果 3. jQuery的基础 什么是JavaScript? 一种描述性语言,也是一种基于对象和事件驱...

36110

扫码关注云+社区