zoukankan      html  css  js  c++  java
  • 面向对象----封装之proprty


    封装之 property:

    property是一种特殊的属性,访问它时会执行一段功能(函数),然后返回值。
    把类体的方法,通过property函数来装饰,装饰过的方法对象可以通过调用属性的方式来调用,
    对象名 +‘.’+属性名

    例:
    BMI指数(bmi是计算而来的,但很明显它听起来像是一个属性而非方法,
    如果我们将其做成一个属性,更便于理解)

    成人的BMI数值:
    过轻:低于18.5
    正常:18.5-23.9
    过重:24-27
    肥胖:28-32
    非常肥胖, 高于32
      体质指数(BMI)=体重(kg)÷身高^2(m)
      EX:70kg÷(1.75×1.75)=22.86
     1 class PeopleBMI:
     2     def __init__(self,name,weight,height):
     3         self.name=name
     4         self.weight=weight
     5         self.height=height
     6 
     7     @property
     8     def bim(self):
     9         """
    10         定义bim方法
    11         :return:
    12         """
    13         return self.weight / (self.height**2)
    14 # 定义对象
    15 yangwei=PeopleBMI('yangwei',62.5,1.7)
    16 """
    17 这样我们就可以直接加点来调用。  
    18 调用yangwei.bmi本质就是触发函数bmi的执行,
    19 从而拿到其返回值
    20 
    21 """
    22 print(yangwei.bim)

    通过调用property属性 又衍生了 setter 与 deleter 两个装饰器。
     1 class PeopleBMI:
     2     def __init__(self,name,weight,height):
     3         self.__name=name  #把name属性隐藏起来。
     4         self.weight=weight
     5         self.height=height
     6     @property
     7     def name(self):
     8         print('你正在访问用户名!')  # 我们可以加一系列逻辑判断。
     9         return self. __name
    10     
    11     @name.setter  #按照原方法调用
    12     def name(self,nname):
    13         if type(nname)is not str:
    14             raise TypeError('必须为str 类型')
    15         self.__name=nname
    16         
    17     @name.deleter
    18     def name(self):
    19         print('确认删除吗?')
    20         del self.__name
    21         
    22 obj=PeopleBMI('yangwei',62,1.7)
    23 del obj.name
    24 obj.name='egon'
    View Code
  • 相关阅读:
    su 命令切换用户带来的问题
    系统无法启动
    Linux单用户模式
    反射
    propety/静态方法
    内置方法,序列化模块
    第1月5周3天
    第1月4周5天
    第1月4周4日
    第1月4周3日
  • 原文地址:https://www.cnblogs.com/yangwei666/p/8856175.html
Copyright © 2011-2022 走看看