当前位置: 首页 > news >正文

面向对象-特性property

什么是特性property
property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值
例一:BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,如果我们将其做成一个属性,更便于理解)
成人的BMI数值:
过轻:低于18.5
正常:18.5-23.9
过重:24-27
肥胖:28-32
非常肥胖, 高于32
体质指数(BMI)=体重(kg)÷身高^2(m)
class People:
    def __init__(self,name,weight,height):
        self.name=name
        self.weight=weight
        self.height=height

    @property    #加上这个装饰器
    def bmi(self):
       return self.weight / (self.height **2 )


p1=People('egon',75,1.81)
print(p1.bmi)   # 调用函数直接 打印函数名,不用加括号了
#实际上是一个方法  不可以 做属性的再赋值

 

class People:
    def __init__(self,name):
        self.__name=name

    @property    #调取
    def name(self):
        print('getter')
        return self.__name


    @name.setter   #赋值
    def name(self,val):
        print('setter',val)
        if not isinstance(val,str):
            print('名字必须是字符串')
            return
        self.__name=val

    @name.deleter
    def name(self):
        print('deleter')

        print('不允许删除')

p=People('egon')
print(p.name)

p.name='EGON'
为什么要用property
将一个类的函数定义成特性以后,对象再去使用的时候obj.name,
根本无法察觉自己的name是执行了一个函数然后计算出来的,
这种特性的使用方式遵循了统一访问的原则

转载于:https://www.cnblogs.com/hexiaorui123/p/10201462.html

相关文章:

  • 细数Windows 的那些小技巧!
  • linux自学(六)之开始centos学习,更换yum源
  • C#串口传输中文字符
  • 使用Elasticsearch-jdbc为MySQL数据库建立索引
  • 高性能JavaScript(数据存取)
  • 通过cmake在Android中调用c语言,且三方应用通过so库调用c语言
  • request设置属性 一般当做下一个页面的结果集
  • Niagara基于javascript的控件开发
  • SpringBoot之打成war包部署到Tomcat
  • 基本数据类型中的浮点类型
  • MyBaits 常见面试题
  • 洛谷p1072 gcd,质因数分解
  • 大结局---Miracl库下完全实现SM2加密算法
  • php封装生成随机数函数
  • 洛谷P3372 【模板】线段树 1
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 【Linux系统编程】快速查找errno错误码信息
  • 【个人向】《HTTP图解》阅后小结
  • CSS 三角实现
  • ES6核心特性
  • Javascripit类型转换比较那点事儿,双等号(==)
  • JavaScript设计模式与开发实践系列之策略模式
  • Odoo domain写法及运用
  • python学习笔记-类对象的信息
  • Rancher如何对接Ceph-RBD块存储
  • underscore源码剖析之整体架构
  • uni-app项目数字滚动
  • Vue.js源码(2):初探List Rendering
  • vue-cli3搭建项目
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 力扣(LeetCode)21
  • 盘点那些不知名却常用的 Git 操作
  • 思考 CSS 架构
  • 微信小程序--------语音识别(前端自己也能玩)
  • 学习笔记TF060:图像语音结合,看图说话
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 你对linux中grep命令知道多少?
  • LevelDB 入门 —— 全面了解 LevelDB 的功能特性
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​【已解决】npm install​卡主不动的情况
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • # Maven错误Error executing Maven
  • $.type 怎么精确判断对象类型的 --(源码学习2)
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (windows2012共享文件夹和防火墙设置
  • (二)springcloud实战之config配置中心
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (论文阅读11/100)Fast R-CNN
  • (转载)Google Chrome调试JS
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)