正常情况下,类包含的属性应该是隐藏的,只允许通过类提供的方法来间接的实现对类属性的访问和操作。

class Person:
#构造函数
def __init__(self, name):
self.name = name
#设置name属性值的函数
def setname(self, name):
self.name = name
#访问name属性值的函数
def getname(self):
return self.name
#删除name属性值的函数
def delname(self):
self.name = "xxx"
xiaobai = Person("xiaobai")
#获取name属性值
print(xiaobai.getname())
#设置name属性值
xiaobai.setname("xiaohei")
print(xiaobai.getname())
#删除name属性值
xiaobai.delname()
print(xiaobai.getname())
xiaobai
xiaohei
xxx

python中提供了property()函数,可以实现在不破坏类封装原则的前提下,让开发者依旧使用“类对象.属性”的方式操作类中的属性。

class Person:
#构造函数
def __init__(self, name):
self.__name = name #双前导下划线(私有属性)会导致解释器重写属性名称,以避免子类中的命名冲突
#设置name属性值的函数
def setname(self, name):
self.__name = name
#访问name属性值的函数
def getname(self):
return self.__name
#删除name属性值的函数
def delname(self):
self.__name = "xxx"
#为name属性配置property()函数
name = property(getname, setname, delname, '说明文档')
#调取说明文档的两种方式
print(Person.name.__doc__)
help(Person.name)
xiaobai = Person("xiaobai")
#获取name属性值
print(xiaobai.name)
#设置name属性值
xiaobai.name = "xiaohei"
print(xiaobai.name)
#删除name属性值
del xiaobai.name
print(xiaobai.name)
说明文档
Help on property: 说明文档 xiaobai
xiaohei
xxx

python property()函数:定义属性的更多相关文章

  1. 第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现

    第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现 一.    案例说明 本节将通过一个案例介绍怎么使用property定义快捷的属性访问.案例中使用Rectan ...

  2. 第7.23节 Python使用property函数定义属性简化属性访问的代码实现

    第7.23节 Python使用property函数定义属性简化属性访问的代码实现 一.    背景       在本章前面章节中,我们介绍了类相关的知识,并举例进行了说明,在这些例子中会定义一些形如 ...

  3. Python使用property函数定义属性访问方法如果不定义fget会怎么样?

    我们知道Python使用property函数定义属性访问方法时的语法如下: 实例属性=property(fget=None, fset=None, fdel=None, doc=None) 而是要@p ...

  4. Python使用property函数定义的属性名与其他实例变量重名会怎么样?

    首先如果定义的属性名与该属性对应的操作方法操作的实例对象同名就会触发无穷的递归调用,相关部分请参考<Python案例详解:使用property函数定义与实例变量同名的属性会怎样?> 但如果 ...

  5. 第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样?

    第7.25节 Python案例详解:使用property函数定义与实例变量同名的属性会怎样? 一.    案例说明 我们上节提到了,使用property函数定义的属性不要与类内已经定义的普通实例变量重 ...

  6. Python property() 函数

    Python property() 函数  Python 内置函数 描述 property() 函数的作用是在新式类中返回属性值. 语法 以下是 property() 方法的语法: class pro ...

  7. python中函数定义之实参、形参

    一般在函数的定义中,会有一类变量---形参,它是函数完成其工作的一项信息.实参往往是调用函数时传递给函数的信息.我们在调用函数时,将要让函数使用的信息放在括号内.例如定义一个函数def greet_u ...

  8. python的函数定义中99%的人会遇到的一个坑

    列表是一种经常使用的数据类型.在函数的定义中,常常会使用列表作为参数. 比如,要测试一个接口的数据,接口返回的数据格式如下: { "code": "20000" ...

  9. python中函数定义与调用顺序问题

    def main(): try: mtd(3) except Exception as e: print("程序出现异常:", e) mtd(3) def mtd(a): if a ...

随机推荐

  1. linux kgdb 补丁

    目前为止我们看到的 2 个交互式调试方法( 使用 gdb 于 /proc/kcore 和 kdb) 都缺乏 应用程序开发者已经熟悉的那种环境. 如果有一个真正的内核调试器支持改变变量, 断点 等特色, ...

  2. 2019年7月20日针对iPhone7/7P有锁机的爆破限制

    背景 2019年7月20号苹果更改了激活策略,致使卡贴机一夜回到解放前,目前只能使用tmsi或者tmsi+iccid模式激活手机,但是缺点是移动联通信号真的不稳定,漏接电话,无法开启热点等等毛病.尤其 ...

  3. H3C端口状态

  4. Sql Server知识点拨

    一.Sql Server异常捕获try catch 二.集增加与修改的存储过程 三.显示某一列中有重复值的行 转载自:https://www.cnblogs.com/527289276qq/

  5. Android4_学会使用Log打印

    一.Log介绍: Android中的日志工具类是Log(android.util.Log),这个类中提供了如下5个方法来供我们打印日志. Log.v() .用于打印那些最为琐碎的.意义最小的日志信息. ...

  6. spring MVC 核心配置

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  7. 024.讲MFC_窗口指针

    窗口指针通过HWND获得CWnd指针 //如何通过窗口句柄获得窗口指针获得应用程序主窗口的指针 //如何获得应用程序主窗口的指针一.建立名为dialogPoint的mfc工程,添加两个button 双 ...

  8. HMaster/HRegion Server 工作原理

      1.HBase系统架构       2. HRegion Sever架构图 0.94之前的版本 0.96+的版本 WAL: 即Write Ahead Log, 是HDFS上一个文件,早期版本中称为 ...

  9. markdown设置编辑基本语法

    看到其他人写的东西,版面设计,文字样式,区域划分都是那么好看,我一直不知道是怎么设计的,今天发现了,做以记录. #一.设置Markdown编辑模式 二.Markdown编辑语法 一.标题 在想要设置为 ...

  10. 异常 A component named TableViewForm already exists 解决方法

    用navicate连接mysql,打开数据库表格,出现 A component named TableViewForm already exists  异常信息,如下图: 1.异常原因: 打开的表格数 ...