1、如何创建可管理的对象属性?

实际案例:

在面向对象编程中,我们把方法(函数)看作对象的接口,直接访问对象的属性可能是不安全的,或设计上不够灵活。但是使用调用方法在形式上不如访问属性简洁。

# 创建圆的类,获得圆的半径或设置圆的半径,需要为这个类添加如下两个方法
# 访问器和设置器形式:
circle.getRadius()
circle.setRadius(5.0)   # 繁
# 直接访问形式:
circle.radius
circle.radius = 5.0     # 简

能否在形式上是属性访问,但实际上调用方法?

解决方案:

使用property函数为类创建可以管理属性(方法),fget/fset/fdel对应相应属性访问。

2、代码演示

from math import piclass Circle(object):def __init__(self, radius):# 圆半径self.radius = radiusdef get_radius(self):# 对半径保留2位小数取四舍五入return round(self.radius, 2)def set_radius(self, value):if not isinstance(value, (int, float)):raise ValueError('wrong type')self.radius = float(value)def get_area(self):# 获得圆的面积return self.radius ** 2 * pi# 3个参数分别对应,访问方法、设置方法、删除方法R = property(get_radius, set_radius)c = Circle(3.2)
'''
安全性:
直接访问属性可能会存在问题,在某些时刻用户参数值可能传错了,
传了一个字符串,在逻辑上显然已经错误了半径不可能是字符串,
但是在程序运行上不会有任何错误。因为实例的属性可以是任何类型。
用户并不知道它的逻辑上出现错误,继续做计算结果显示是错误的。
'''
c.radius = 'abc'
d = c.radius * 2
print(d)
'''
逻辑上错了但运行上没有错,这就导致程序出现一些莫名其妙问题。
希望能在赋值的这个点上就知道程序已经出错了,这就是使用方法优势,
使用方法的时候手段就变多了,可以对参数值进行类型检查。
'''
# c.set_radius('abc')c2 = Circle(3.2)
'''
灵活性:
开始的时候圆的半径总是用户输出什么就返回什么,
后来需求改变了希望用户看到的半径是原来输入的
保留两位小数并且四舍五入结果。
这种情况下如果使用方法这种情况就很好解决,
这里面涉及到一个隐藏,不想让用户看到真实的东西。
'''
# 用户的radius没有变但得到的结果改变了
print(c2.get_radius())# 使用property函数安全简洁高效调用各个方法
c3 = Circle(3.2)
# 会调用property第1个访问方法get_area
print(c3.R)
# 赋值时候,会调用property第3个设置方法set_radius
c3.R = 5.9
print(c3.R)

Python使用property函数为类创建管理方法属性相关推荐

  1. 【python】使用property函数为类创建可管理属性fget\fset\fdel

    import mathclass Circle:def __init__(self, radius):self.__radius = radius # 设置私有属性,不让用实例.__radius访问d ...

  2. python中property函数_python 邮件表格Python中property函数用法实例分析

    本文实例讲述了Python中property函数用法.分享给大家供大家参考,具体如下: 通常我们在访问和赋值属性的时候,都是在直接和类(实例的)的__dict__打交道,或者跟数据描述符等在打交道.但 ...

  3. Python使用property函数和使用@property装饰器定义属性访问方法的异同点分析

    Python使用property函数和使用@property装饰器都能定义属性的get.set及delete的访问方法,他们的相同点主要如下三点: 1.定义这些方法后,代码中对相关属性的访问实际上都会 ...

  4. Python进阶:理解元类创建类ABCMeta

    Python进阶:Python进阶:理解元类创建类ABCMeta 一.理解元类(Meta class) 1.1 元类直观理解 1.2 Python官方文档给出的元类描述 二.理解抽象基类(ABC, A ...

  5. 【Python面试】 说说Python变量、函数、类的命名规则?

    往期面试题: 谈谈对 Python 和其他语言的区别? 说说4种常用编码的区别? 说说Python面向对象三大特性? 说说Python中有几种数据类型? 废话不多说,开始今天的题目: 问:Python ...

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

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

  7. Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)

    目录 1. 水平布局类(QHBoxLayout) 2.垂直布局类(QVBoxLayout) 3.网格布局类(QGridLayout) 3.1.单一的网络布局 3.2.跨越行.列的网络布局 4.表单布局 ...

  8. python buildin 中的一些类中为什么方法的内容都是pass?

    python buildin 中的一些类中为什么方法的内容都是pass? 文章目录: 一.看到的一些方法的定义都是pass 二.如何查看Python的源代码 python 的源代码是用C语言写的 一. ...

  9. Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)

    目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...

最新文章

  1. 完美的隐藏软键盘方法
  2. java中关于时间的计算
  3. NanoPi NEO Air使用十三:使用自带的fbtft驱动点亮SPI接口TFT屏幕,ST7789V,模块加载的方式
  4. 青龙羊毛——灰兔掌赚吹牛逼
  5. python自动测试p-关于《Python自动化测试实战》
  6. 数据切分——Mysql分区表的管理与维护
  7. 【大数据】企业级大数据技术体系概述
  8. GraphPad Prism 统计教程:简单线性回归原理
  9. oracle获取下级函数,从oracle获取函数和过程签名列表
  10. tornado项目搭建_Python深度学习原理及项目实战2019年3月21日上海举办
  11. Java List集合转换相关操作
  12. java面试 上传文件_字节跳动面试官,我也实现了大文件上传和断点续传
  13. 阿里再发最严口罩禁令;铁路再次调整免费退票;iOS 13.4 测试版发布 | 极客头条...
  14. 怎么查看自己电脑是否被安装远程监控
  15. python实现sm3加密算法
  16. 我最喜爱的九位历史人物 - 苏轼(Space搬家)
  17. java方法执行jvm做了什么_JVM 方法到底如何执行
  18. maven创建eclipse wtp项目
  19. 系统集成项目管理工程师学习
  20. HTML+CSS+JS的基础知识笔记

热门文章

  1. keil下载时出现 Error: Not a genuine ST Device! Abort connection.
  2. 傅立叶变换与小波变换
  3. 利用JMail组件快速构建邮件程序
  4. 出现报错:UnpicklingError: invalid load key, ‘-‘.
  5. 7-10 公路村村通 prim算法
  6. LSB:Linux标准规范
  7. 知识树沉淀总结—计算机网络
  8. JS(15)、this关键字
  9. 小尺寸android手机,索尼Z5 Compact:好的小尺寸Android手机
  10. easyrecovery2023永久免费版激活密钥,手把手教您用EasyRecovery快速恢复数据