Property的概念:property是一种特殊的属性,访问它时会执行一段功能(函数),然后返回值。

  1. import math
  2.  
  3. class Circle:
  4.  
  5. def __init__(self,radius):#园的半径radius
  6.  
  7. self.radius=radius
  8.  
  9. @property#area=property(area)
  10.  
  11. def area(self):
  12.  
  13. return math.pi*self.radius**2#计算面积
  14.  
  15. @property
  16.  
  17. def perimeter(self):
  18.  
  19. return 2*math.pi*self.radius#计算周长
  20.  
  21. c=Circle(5)
  22.  
  23. print(c.radius)
  24.  
  25. # print(c.area())
  26.  
  27. # print(c.perimeter())
  28.  
  29. print(c.area)#函数前添加装饰器后,调用时不加括号就可以运行
  30.  
  31. print(c.perimeter)

  

为什么要用property

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

除此之外:

面向对象的封装有三种方式:

【public】

这种其实就是不封装,是对外公开的

【protected】

这种封装方式对外不公开,但对朋友或者子类公开

【private】
这种封装对谁都不公开

Python并没有在语法上把他们三个内建到自己的CLASS机制中,在C++里一般会将所有的数据设置为私有的,然后提供set和get方法去设置和获取,在Python中通过property方法可以实现

  1. class Foo:
  2.  
  3. def __init__(self,val):
  4.  
  5. self.__NAME=val #将所有的数据属性都隐藏起来
  6.  
  7. @property
  8.  
  9. def name(self):
  10.  
  11. return self.__NAME #obj.name访问的是self.__NAME(这也是真实值的存放位置)
  12.  
  13. @name.setter
  14.  
  15. def name(self,value):
  16.  
  17. if not isinstance(value,str): #在设定值之前进行类型检查
  18.  
  19. raise TypeError('%s must be str' %value)
  20.  
  21. self.__NAME=value #通过类型检查后,将值value存放到真实的位置self.__NAME
  22.  
  23. @name.deleter
  24.  
  25. def name(self):
  26.  
  27. raise TypeError('Can not delete')
  28.  
  29. f=Foo('egon')
  30.  
  31. print(f.name)
  32.  
  33. # f.name=10 #抛出异常'TypeError: 10 must be str'
  34.  
  35. del f.name #抛出异常'TypeError: Can not delete'

  

python之property属性的更多相关文章

  1. python 中 property 属性的讲解及应用

    Python中property属性的功能是:property属性内部进行一系列的逻辑计算,最终将计算结果返回 property属性的有两种方式: 1. 装饰器 即:在方法上应用装饰器 2. 类属性 即 ...

  2. 【转】python之property属性

    1. 什么是property属性 一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法 # ############### 定义 ############### class Foo: def ...

  3. python中property属性的介绍及其应用

    Python的property属性的功能是:property属性内部进行一系列的逻辑计算,最终将计算结果返回. 使用property修饰的实例方法被调用时,可以把它当做实例属性一样 property的 ...

  4. python的property属性

    最近看书中关于Python的property()内建函数属性内容时<python核心编程>解释的生僻难懂,但在网上看到了一篇关于property属性非常好的译文介绍. http://pyt ...

  5. Python中property属性的概论和使用方法

    property属性 概念: 定义一个方法但是使用装饰器property,只可以有一个self形参 可以用这样的属性动态的获取属性的值 定义方式(经典类) class Fun(): @property ...

  6. 网络编程-Python高级语法-property属性

    知识点: 一.什么是property属性? 一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法,Python的property属性的功能是:property属性内部进行一系列的逻辑计算,最 ...

  7. python中的property属性

    目录 1. 什么是property属性 2. 简单的实例 3. property属性的有两种方式 3.1 装饰器方式 3.2 类属性方式,创建值为property对象的类属性 4. property属 ...

  8. [转载]Python使用@property装饰器--getter和setter方法变成属性

    原贴:为什么Python不需要getter和setter getter 和 setter在java中被广泛使用.一个好的java编程准则为:将所有属性设置为私有的,同时为属性写getter和sette ...

  9. Python深入浅出property特性属性

    导语 在Java中,通常在类中定义的成员变量为私有变量,在类的实例中不能直接通过对象.属性直接操作,而是要通过getter和setter来操作私有变量. 而在Python中,因为有property这个 ...

随机推荐

  1. Doracle.jdbc.J2EE13Compliant=true

    To make the Oracle driver behave in a Java EE-compliant manner, you must define the following JVM pr ...

  2. 【bzoj5072】[Lydsy十月月赛]小A的树 树形背包dp

    题解: 比较好想 首先注意到如果最暴力的做法复杂度无法接受 而5000的范围基本是n^2做法了 只使用已经遍历过的点数目和当前子树中的点数目转移我们知道复杂度是n^2的 于是大胆猜测一波同一个节点为根 ...

  3. 【NOI2017】泳池

    题解: 满分的笛卡尔树以后再学吧.. 40分还是比较好想的 但是状态挺复杂的 直接贴代码了 代码: #include <bits/stdc++.h> using namespace std ...

  4. [转]利用ssh传输文件

    利用ssh传输文件 http://www.cnblogs.com/jiangyao/archive/2011/01/26/1945570.html 在linux下一般用scp这个命令来通过ssh传输文 ...

  5. P1373 小a和uim之大逃离 二维dp

    题目背景 小a和uim来到雨林中探险.突然一阵北风吹来,一片乌云从北部天边急涌过来,还伴着一道道闪电,一阵阵雷声.刹那间,狂风大作,乌云布满了天空,紧接着豆大的雨点从天空中打落下来,只见前方出现了一个 ...

  6. Redis数据库 01概述| 五大数据类型

    1.NoSQL数据库简介 解决应用服务器的CPU和内存压力:解决数据库服务的IO压力: ----->>> ① session存在缓存数据库(完全在内存里),速度快且数据结构简单: 打 ...

  7. flume初识

    一.flume特点 flume是目前大数据领域数据采集的一个利器,当然除了flume还有Fluentd和logstash,其他的目前来说并没有深入的了解,但是我觉得flume能够在大数据繁荣的今天屹立 ...

  8. 上海市2019年公务员录用考试笔试合格人员笔试成绩(A类)

    考试类别:A类 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 注册编号 总成绩 4016574 127.4 5112479 145.9 5125732 124.3 5141074 159.9 ...

  9. BZOJ-8-2115: [Wc2011] Xor

    https://www.lydsy.com/JudgeOnline/problem.php?id=2115 题意 : 给出一个连通无向图,求从1到n异或和最小的路径. 思路 :随意找一条简单路径 1- ...

  10. c++ STL 数据结构底层结构

    + STL 的实现: 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层数据结构为一个中央控制器和多个缓冲区,详细见ST ...