• 面向对象-特性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是执行了一个函数然后计算出来的,
    这种特性的使用方式遵循了统一访问的原则
  • 相关阅读:
    SpringBoot是如何动起来的
    Windows 10 安装 Docker for Windows
    Spring Boot2.0 设置拦截器
    修改博客园的css样式
    Spring-Aop
    Java自学-泛型 集合中的泛型
    Java自学-集合框架 聚合操作
    Java自学-集合框架 Comparator和Comparable
    Java自学-集合框架 hashCode原理
    Java自学-集合框架 HashSet、LinkedHashSet、TreeSet之间的区别
  • 原文地址:https://www.cnblogs.com/hexiaorui123/p/10201462.html
Copyright © 2020-2023  润新知