zoukankan      html  css  js  c++  java
  • 创建可管理对象属性, 类的property

    from math import pi
    class Circle(object):
        def __init__(self,radius):
            self.radius = radius
        
        def getRadius(self):
            return self.radius
        
        def setRadius(self, value): 
            if not isinstance(value, (int, float)):   #自定义类型  此处可以一个类型,或者由元组包含多个类型, 如果不满足条件,raise ValueError错误  
                 raise ValueError('wrong type.')
            self.radius = float(value)
        def getarea(self):
                return self.radius * 2 * pi
    c= Circle(3.2)
    c.setRadius("abc")
    print(c.setRadius)
    

    property用法

    from math import pi
    class Circle(object):
        def __init__(self,radius):
            self.radius = radius
        
        def getRadius(self):
            return self.radius
        
        def setRadius(self, value):
            if not isinstance(value, (int, float)):
                 raise ValueError('wrong type.')
            self.radius = float(value)
        def getArea(self):
            return self.radius ** 2 * pi
    
        R = property(getRadius, setRadius)
    c = Circle(3.2)
    print(c.R)
    #c.R= 'abc'
    #print(c.R)
    c.R = 34
    print('nihasdf',c.R)
    

    特性(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

    class People:
        def __init__(self,name,weight,height):
            self.name = name
            self.weight = weight
            self.height = height
    
        @property
        def bmi(self):
            print('=====>>')
            return self.weight / (self.height ** 2)
    
    p = People('egon',50,1.65)
    p.bmi1 = p.weight / (p.height ** 2)
    print('0001',p.bmi1)
    
    print(p.bmi())  # 报错  TypeError: 'float' object is not callable
    p.height = 1.85
    print(p.bmi)
    # p.bmi = 25      #报错  AttributeError: can't set attribute
    
    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 = 'alex'
    print(p.name)
    p.name =1223
    print(p.name)
    del p.name
    输出:
    getter
    egon
    setter alex
    getter
    alex
    setter 1223
    名字必须是字符串类型
    getter
    alex
    deleter
    不允许删除
    
    写入自己的博客中才能记得长久
  • 相关阅读:
    Docker入门之docker-compose [转]
    防火墙和iptables
    MariaDB/MySQL备份和恢复(三):xtrabackup用法和原理详述
    Veritas NetBackup™ for VMware 介绍 (NBU版本 8.2)
    RMAN备份恢复所需要了解的Oracle术语
    mac 下使用命令行打开项目
    ORACLE 11g RAC-RAC DG Duplicate 搭建(生产操作文档)
    15-vuex
    14-Promise
    13-vue-router2
  • 原文地址:https://www.cnblogs.com/heris/p/14115465.html
Copyright © 2011-2022 走看看