zoukankan      html  css  js  c++  java
  • 面向对象之property

    TOC

    一、什么是property

    • 是一个python内置的装饰器,可以装饰在“类内部的方法”上。
    • 可以将改方法的调用方式由对象.方法()转变为对象.方法,也就是去掉了括号的调用方式

    二、为什么要用property

    • 在某些场景下,调用的方式只是用来获取计算后的某个值
    • 必须通过对象.方法方式调用,让该方法看起来像动词

    让名词的方法,调用时更为合理,目的是为了,迷惑调用者,调用的方式误以为是 属性

    三、如何用

    人体BMI指数计算

    # 需求: 计算人体 bmi 指数
    # 体重 / 身高的平方
    # value = weight / (height * height)
    
    
    class User:
        def __init__(self, name, weight, height):
            self.__name = name
            self.weight = weight
            self.height = height
    
        @property  # 放置在被装饰的方法之上
        def bmi(self):
            value = self.weight / (self.height ** 2)
            return value
    
        def name(self):
            return self.__name
    
    
    user_obj = User('kody', 120, 1.7)
    user_obj.bmi  # 调用时,可以去掉括号
    print(user_obj.bmi)

    四、property中的修改属性和删除属性

    修改方法的名字,要与被property装饰器后的方法一样

    class User:
        def __init__(self, name, weight, height):
            self.__name = name
            self.weight = weight
            self.height = height
    
        @property  # 放置在被装饰的方法之上
        def bmi(self):
            value = self.weight / (self.height ** 2)
            return value
    
        @property  # 调用name的时候不需要加括号
        def name(self):
            return self.__name
    
        @name.setter # 修改.__name中的属性
        def name(self, value):
            self.__name = value
    
        @name.deleter
        def name(self):  # 删除.__name中的属性
            del self.__name
    
    
    user_obj = User('kody', 120, 1.7)
    user_obj.name = '高弟'  # 修改参数可以不加括号
    print(user_obj.name)
    结果:高弟
    
    print(user_obj.name)
    结果:报错
    




  • 相关阅读:
    solr 笔记
    oracle 相关笔记
    Linux之shell
    Linux 笔记2
    Linux 笔记1
    ConfigurationClassParser类的parse方法源码解析
    ConfigurationClassPostProcessor类的processConfigBeanDefinitions方法源码解析
    spring-ConfigurationClassUtils类
    有关金融的一些专有名词的解释
    centos7安装hadoop3.2.1集群
  • 原文地址:https://www.cnblogs.com/cnhyk/p/11944833.html
Copyright © 2011-2022 走看看