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:访问器方法
- 问题
- 如果我们需要使用一个新的描述属性(
size = (height, width)
),怎么办?重新定义self.size
和相应的访问器方法是可以的,但是原始编写的类基本上就废掉了,因为你要重新实现 size属性的 赋值、访问、删除、说明操作, 同时处理size,height, width的数据同步,想想都头疼。 - 实现这系列属性还有另外一种方法,那就是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) #(注意:注释去掉了!!!)
说明:
-
新的描述属性(
size = (height, width)
)通过property函数间接产生了。可以通过(.size)设置和访问了。 - 语法是这样的:新属性=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 # 访问该属性
网友评论