1. Python3中property()函数学习

Python是面向对象编程的语言,所以类属性及其(赋值、访问、删除、说明)是十分关键的元素。看到网上有人对这个函数的说明,感觉他们都讲的不透彻。下面我以《Python基础教程》9.5节的代码说明

传统属性方法

  • 类定义
class Rectangle():
    def __init__(self):
        self.height = 0
        self.width =0
    def setSize(self,size):
        self.height, self.width = size
    def getSize(self):
        return self.height,self.width
#    size = property(getSize, setSize) #(注意:该句话注释了!!!)
  • 属性设置与访问
myRect = Rectangle()
myRect.height = 100 # 设置1:属性
myRect.setSize(100,200)# 设置2:访问器方法
height = myRect.height # 访问1: 属性
height, width = myRect.getSize()# 访问2:访问器方法
  • 问题
  1. 如果我们需要使用一个新的描述属性(size = (height, width)),怎么办?重新定义self.size 和相应的访问器方法是可以的,但是原始编写的类基本上就废掉了,因为你要重新实现 size属性的 赋值、访问、删除、说明操作, 同时处理size,height, width的数据同步,想想都头疼。
  2. 实现这系列属性还有另外一种方法,那就是property函数。

Property函数构造属性

  • 新类的定义(仅仅只多了一条语句
class Rectangle():
    def __init__(self):
        self.height = 0
        self.width =0
    def setSize(self,size):
        self.height, self.width = size
    def getSize(self):
        return self.height, self.width
    size = property(getSize, setSize) #(注意:注释去掉了!!!)

说明:

  1. 新的描述属性(size = (height, width))通过property函数间接产生了。可以通过(.size)设置和访问了。
  2. 语法是这样的:新属性=property(读取函数,设置函数,删除函数,文档函数)。如果没有指定设置函数,则该属性只可读,不可写。如果连读取函数都没有,则该属性不可读。
  • 属性设置与访问
myRect = Rectangle()
myRect.height = 100 # 设置1:属性
myRect.setSize(100,200)# 设置2:访问器方法
height = myRect.height # 访问1: 属性
height, width = myRect.getSize()# 访问2:访问器方法
myRect.size = (100,200) # 设置新的property函数产生的属性
size = myRect.size     # 访问该属性
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SwiftDay011.MySwiftimport UIKitprintln("Hello Swift!")var...
    smile丽语阅读 9,233评论 0 6
  • 1、什么叫魔法方法? 魔法方法:Python解释器自动给出默认的,是可以给你的类增加魔力的特殊方法。如果你的对象实...
    Bling_ll阅读 4,709评论 0 2
  • 1 对不起,妈妈! 我要走了,没有和你商量,我怕你不允许。 就像去年那次春游,你不许我报名,说我一出门就会感冒,要...
    止水碎片阅读 4,612评论 26 26
  • “我想换玫瑰金,但是……” “我想去旅行,但是……” “我想买PRADA,但是……” “我想加薪,但是……” “我...
    孤独的安静着阅读 4,172评论 0 0
  • 文/愚木 不能停止 内心的狂野 溺水的鸭子 哭叫连连 太阳在东头 你向西头 四季在轮转 我却没变 蜿蜒的公路 没有...
    愚木的简书阅读 1,800评论 2 1