python_如何创建可管理的对象属性
案例:
在面向对象编程中,我们把方法作为对象的接口,自己访问对象的属性可能是不安全的,或设计上不灵活,但是使用调用方法在形式上不如访问属性简洁
繁:
circle.getRadius()
circle.setRadius(5.0)
#!/usr/bin/python3 from math import pi class Circle(): def __init__(self, radius): self.radius = radius # 获取半径接口 def get_radius(self): return self.radius # 设置半径接口 def set_radius(self, value): if isinstance(value, (int, float)): self.radius = float(value) else: raise ValueError('wrong type') # 获取面积接口 def get_area(self): return round(self.radius ** 2 * pi, 2) if __name__ == '__main__': c = Circle(3.0) print(c.get_area()) # 设置半径 c.set_radius(5.0) print(c.get_radius(), c.get_area())
简:
circle.radius
circle.radius = 5.0
第二种方式看起来更加舒服简洁,如何实现?
如何实现?
- 通过类装饰器property,把类方法,变成类似属性一样
# !/usr/bin/python3 from math import pi class Circle(): def __init__(self, radius): self.radius = radius # 获取半径 @property def get_radius(self): return self.radius # 获取面积 @property def get_area(self): return round(self.radius ** 2 * pi, 2) # 设置半径值,指明为get_area函数设置值,但是给哪个函数设置值无关紧要,只要是类属性,其他函数都可以访问 @get_area.setter def set_radius(self, value): if isinstance(value, (int, float)): self.radius = float(value) else: raise ValueError('wrong type') if __name__ == '__main__': c = Circle(3.0) print(c.get_area) c.set_radius = 5.0 print(c.get_radius, c.get_area)
- 通过内置property方法
# !/usr/bin/python3 from math import pi class Circle(): def __init__(self, radius): self.radius = radius # 获取半径 def get_radius(self): return self.radius # 获取面积 def get_area(self): return round(self.radius ** 2 * pi, 2) # 设置半径值, def set_radius(self, value): if isinstance(value, (int, float)): self.radius = float(value) else: raise ValueError('wrong type') # obj.R 调用第一个函数,obj = 5.0 调用第二个函数,进行设置值,没有@property灵活 R = property(get_radius, set_radius) if __name__ == '__main__': c = Circle(3.0) print(c.get_area()) c.R = 5.0 print(c.R) print(c.R, c.get_area())
python_如何创建可管理的对象属性的更多相关文章
- python类与对象-如何创建可管理的对象属性
如何创建可管理的对象属性 问题举例 在面向对象编程中, 我们把方法看作对象的接口, 直接访问对象的属性可能是不安全的,或设计上不够灵活. 但是使用调用方法在形式上不如访问属性简洁. circle.ge ...
- Greenplum+Hadoop学习笔记-14-定义数据库对象之创建与管理模式
6.3.创建与管理模式 概述:DB内组织对象的一种逻辑结构.一个DB内能够有多个模式.在未指定模式时默认放置在public中.能够通过"\dn"方式查看数据库中现有模式: test ...
- Oracle02——oracle分页、子查询、集合运算、处理数据、创建和管理表和其他数据库对象
作者: kent鹏 转载请注明出处: http://www.cnblogs.com/xieyupeng/p/7289451.html --oracle分页(Pageing Query) select ...
- python对象属性管理(2):property管理属性
使用Property管理属性 python提供了一种友好的getter.setter.deleter类方法的属性管理工具:property. property()是一个内置函数,它返回一个Proper ...
- 3、ObjectARX开发创建直线、圆、圆弧和修改对象属性
一.本节课程 Arx二次开发创建直线.圆.圆弧和修改对象属性 二.本节要讲解的知识点 1.如何应用C++ ARX二次开发创建直线. 2.如何应用C++ ARX二次开发创建圆. 3.如何应用C++ AR ...
- Greenplum中定义数据库对象之创建与管理模式
创建与管理模式 概述:DB内组织对象的一种逻辑结构.一个DB内能够有多个模式.在未指定模式时默认放置在public中.能够通过"\dn"方式查看数据库中现有模式. testdw=# ...
- python并发编程02 /多进程、进程的创建、进程PID、join方法、进程对象属性、守护进程
python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 目录 python并发编程02 /多进程.进程的创建.进程PID.join方法.进程对象属性.守护进程 ...
- Spring框架context的注解管理方法之二 使用注解注入基本类型和对象属性 注解annotation和配置文件混合使用(半注解)
首先还是xml的配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...
- 【转】使用PowerDesigner的建模创建升级管理数据库
使用PowerDesigner的建模创建升级管理数据库 PowerDesigner是一种著名的CASE建摸工具,最开始为数据库建模设计,即物理模型(Physical Data Model)用于生成数据 ...
随机推荐
- linux centos下安装dokuwiki
首先先大致介绍一下wiki: DokuWiki是一个开源wiki引擎程序,运行于PHP环境下.Doku Wiki 程序小巧而功能强大.灵活,适合中小团队和个人网站知识库的管理. DokuWiki可以与 ...
- sql server存储过程实现批量删除
在项目中用到了存储过程来进行批量删除的操作,给大家分享一下 原理就是把id组成的字符串在数据库分割成数组放一张临时表,删除的时候与id进行对照 --删除会员信息 if OBJECT_ID('pro_D ...
- 微信小程序——Now you can provide attr "wx:key" for a "wx:for" to improve performance.
在官方的swiper(滑块视图容器)中demo代码,运行时会出现Now you can provide attr "wx:key" for a "wx:for" ...
- 简单单页面路由跳转demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 购物车css样式效果
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- 关于Springmvc中include与Sitemesh装饰器的基本使用
关于Springmvc中include与Sitemesh装饰器的使用 !!!转载请注明出处=>http://www.cnblogs.com/funnyzpc/p/7283443.html 静态包 ...
- DFS+打表
N皇后问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- spring如何控制事务
Spring 的事务,可以说是 Spring AOP 的一种实现. AOP面向切面编程,即在不修改源代码的情况下,对原有功能进行扩展,通过代理类来对具体类进行操作. spring是一个容器,通过spr ...
- Dockerfile中CMD和ENTRYPOINT的区别
当启动一个容器时,CMD和ENTRYPOINT都可以用来执行启动命令.但它们的具体用法还是有一些区别: 1. Dockerfile必须至少指定CMD或者ENTRYPOINT其中的一个. 2. ENTR ...
- setTimeout()方法,你真的懂吗?
今天在群里看到了一道经典的javascript题型,之前也遇到过,可是再次遇到时,还是做错,还是不理解,因此这里来做个笔记吧! 不说了,直接上代码吧 for(var i=1; i<=9; i++ ...