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     # 访问该属性

你可能感兴趣的:(1. Python3中property()函数学习)