Python property()函数:定义属性
因此,在不破坏类封装原则的基础上,为了能够有效操作类中的属性,类中应包含读(或写)类属性的多个 getter(或 setter)方法,这样就可以通过“类对象.方法(参数)”的方式操作属性,例如:
class CLanguage:
#构造函数
def __init__(self,name):
self.name = name
#设置 name 属性值的函数
def setname(self,name):
self.name = name
#访问nema属性值的函数
def getname(self):
return self.name
#删除name属性值的函数
def delname(self):
self.name=" x"
clang = CLanguage("C语言中文网")
#获取name属性值
print(clang.getname())
#设置name属性值
clang.setname("Python教程")
print(clang.getname())
#删除name属性值
clang.delname()
print(clang.getname())
运行结果为:
C语言中文网
Python教程
x
可能有读者觉得,这种操作类属性的方式比较麻烦,更习惯使用“类对象.属性”这种方式。庆幸的是,Python 中提供了 property() 函数,可以实现在不破坏类封装原则的前提下,让开发者依旧使用“类对象.属性”的方式操作类中的属性。
property() 函数的基本使用格式如下:
属性名=property(fget=None, fset=None, fdel=None, doc=None)
其中,fget 参数用于指定获取该属性值的类方法,fset 参数用于指定设置该属性值的方法,fdel 参数用于指定删除该属性值的方法,的 doc 是一个文档字符串,用于说明此函数的作用。例如,修改上面的程序,为 name 属性配置 property() 函数:注意,在使用 property() 函数时,以上 4 个参数可以仅指定第 1 个、或者前 2 个、或者前 3 个,当前也可以全部指定。也就是说,property() 函数中参数的指定并不是完全随意的。
class CLanguage:
#构造函数
def __init__(self,n):
self.__name = n
#设置 name 属性值的函数
def setname(self,n):
self.__name = n
#访问nema属性值的函数
def getname(self):
return self.__name
#删除name属性值的函数
def delname(self):
self.__name=" x"
#为name 属性配置 property() 函数
name = property(getname, setname, delname, '指明出处')
#调取说明文档的 2 种方式
#print(CLanguage.name.__doc__)
help(CLanguage.name)
clang = CLanguage("C语言中文网")
#调用 getname() 方法
print(clang.name)
#调用 setname() 方法
clang.name="Python教程"
print(clang.name)
#调用 delname() 方法
del clang.name
print(clang.name)
运行结果为:
Help on property:
指明出处
C语言中文网
Python教程
x
注意,在此程序中,由于 getname() 方法中需要返回 name 属性,如果使用 self.name 的话,其本身又被调用 getname(),这将会先入无限死循环。为了避免这种情况的出现,程序中的 name 属性必须设置为私有属性,即使用 __name(前面有 2 个下划线)。
有关类属性和类方法的属性设置(分为共有属性、保护属性、私有属性),后续章节会做详细介绍。
当然,property() 函数也可以少传入几个参数。以上面的程序为例,我们可以修改 property() 函数如下所示
这意味着,name 是一个可读写的属性,但不能删除,因为 property() 函数中并没有为 name 配置用于函数该属性的方法。也就是说,即便 CLanguage 类中设计有 delname() 函数,这种情况下也不能用来删除 name 属性。name = property(getname, setname)
同理,还可以像如下这样使用 property() 函数:
name = property(getname) # name 属性可读,不可写,也不能删除
name = property(getname, setname,delname) #name属性可读、可写、也可删除,就是没有说明文档
- 随机文章
- 香港 马尔代夫 机票(香港飞往马尔代夫机票折扣优惠,火速预订!)
- 长春-马尔代夫(长春飞往马尔代夫的航班正式开通)
- 丽莉 马尔代夫 特点(探索丽莉酒店:马尔代夫岛上的五星级奢华体验)
- 进贤马尔代夫图片(美丽的马尔代夫,交相辉映的进贤之美!)
- 到马尔代夫七天游(七日梦境之旅:探索马尔代夫美丽海洋)
- 中国 马尔代夫 关系(中马关系升温:马尔代夫成为中国游客新热门目的地)
- 国足对比马尔代夫(国足大胜马尔代夫,全面占据小组榜首)
- 广州城市马尔代夫(广州市最美马尔代夫,美如度假胜地!)
- 峨眉马尔代夫翡翠(峨眉翡翠岛:马尔代夫的一处翡翠宝地)
- 平潭马尔代夫岛屿(福建平潭开发区将建马尔代夫度假岛屿)
- 奥嘉 马尔代夫(奥嘉酒店推出独家马尔代夫之旅)
- 日照马尔代夫美食(日照美食体验:品味马尔代夫特色佳肴)
- 途牛 马尔代夫(途牛推出特惠马尔代夫旅游套餐)
- 摩纳哥与马尔代夫(邂逅豪华海滨生活:摩纳哥与马尔代夫)
- 国足马尔代夫观众(国足客场胜马尔代夫,球迷现场观战。)
- 美景胜过马尔代夫(媲美马尔代夫!美不胜收的绝美风景!)
- 大连 马尔代夫(大连走进马尔代夫:一场场惊喜的旅行)
- 写乐 马尔代夫(探秘马尔代夫——珍贵海洋生态的天堂)
- 玉林马尔代夫钓鱼(玉林游客在马尔代夫海域畅享海钓乐趣)
- 蜜月首选马尔代夫(梦幻蜜月之选:马尔代夫水上别墅体验)
- 玛丽富士马尔代夫(玛丽富士岛:独特度假胜地从大海崛起)
- 重庆马尔代夫民俗(探访重庆民俗:切身体验马尔代夫文化)
- 贵溪马尔代夫简介(探秘贵溪马尔代夫:全新度假胜地介绍)
- 福绵 马尔代夫(福绵集团将为马尔代夫岛屿提供清洁能源)
- 香香假期马尔代夫(“享受轻奢假期,探索马尔代夫之美”)
- 马尔代夫不能上网(马尔代夫旅游局宣布限制游客上网使用)
- 马尔代夫东乡文案(马尔代夫东乡:美丽海岛风光胜似天堂)
- 马尔代夫南部独立(马尔代夫南部岛屿宣布独立成立新国家)
- 马尔代夫冰糖猫眼(马尔代夫岛上发现稀有的白色猫眼宝石)
- 马尔代夫出圈照片(马尔代夫炫酷照片火了,网友惊叹不已)
