Property

  1. #property
  2. #内置装饰器函数,只在面向对象中使用
  3. from math import pi
  4. class Circle:
  5. def __init__(self,r ):
  6. self.r = r
  7. @property
  8. def perimeter(self):#property属性不能传递任何参数
  9. return 2*pi*self.r
  10. @property
  11. def area(self):
  12. return self.r**2*pi
  13. c1 = Circle(5)
  14. # print(c1.area()) #不加property目前定义的是个方法,圆的面积应该是属性,故用@property装饰
  15. print(c1.perimeter) #调用不用加()
  16. print(c1.area)

利用Setter修改Property装饰的变量

  1. class Person:
  2. def __init__(self, name):
  3. self.__name = name
  4. @property
  5. def name(self):
  6. return self.__name + 'sb'
  7. @name.setter #定义一个方法.setter,必须和property装饰同名的方法
  8. def name(self,new_name):
  9. self.__name = new_name
  10. #实现了property装饰的变量的修改操作
  11. tiger = Person('泰哥')
  12. print(tiger.name)
  13. tiger.name = '全部'
  14. print(tiger.name)
  15. >>>>
  16. 泰哥sb
  17. 全部sb

  • Property的实际应用场景 --某个属性需要经过一些计算或操作而得出的结果,通常定义为一个方法然后用Property装饰
  1. class Goods:
  2. discount = 0.5
  3. def __init__(self,name, price):
  4. self.name = name
  5. self.__price = price #折扣前价格定义为私有的
  6. @property
  7. def price(self): #折扣后的价格定义为一个方法并用property装饰,进行一些操作
  8. return self.__price*Goods.discount
  9. apple = Goods('苹果', 5)
  10. print(apple.price)

Property的删除-deleter

  1. class Person:
  2. def __init__(self,name):
  3. self.__name = name
  4. @property
  5. def name(self):
  6. return self.__name
  7. @name.deleter #property装饰的变量.deleter
  8. def name(self):
  9. del self.__name#执行删除私有变量
  10. @name.setter #设置一个新的变量
  11. def name(self,new_name): #可以传递一个变量
  12. self.__name = new name
  13. brother2 = Person('二哥')
  14. print(brother2.name)
  15. del brother2.name #删除某个私有变量
  16. print(brother2.name)
  17. >>>>
  18. 二哥
  19. File "C:/Users/jwang2/PycharmProjects/PlayPy/Demo/S9-day25-封装.py", line 139, in <module>
  20. print(brother2.name)
  21. File "C:/Users/jwang2/PycharmProjects/PlayPy/Demo/S9-day25-封装.py", line 131, in name
  22. return self.__name
  23. AttributeError: 'Person' object has no attribute '_Person__name'

Python类总结-封装(Property, setter, deleter)的更多相关文章

  1. python 类的封装/property类型/和对象的绑定与非绑定方法

    目录 类的封装 类的property特性 类与对象的绑定方法与非绑定方法 类的封装 封装: 就是打包,封起来,装起来,把你丢进袋子里,然后用绳子把袋子绑紧,你还能拿到袋子里的那个人吗? 1.隐藏属性和 ...

  2. 孤荷凌寒自学python第二十三天python类的封装

    孤荷凌寒自学python第二十三天python类的封装 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.从怎么样访问类的内部代码块中定义的私有属性说起 类中定义的私有属性和私有方法是无法被 ...

  3. python类的封装

    Python之类的封装 1. 什么是封装 装:往容器/名称空间里存入名字 封:代表将存放于名称空间中的名字给藏起来,这种隐藏对外不对内(怎么做到的,在下文解释) 2. 为何要封装 封数据属性:不想要给 ...

  4. python类的封装与继承

    封装 关注公众号"轻松学编程"了解更多. 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义本身就是封装的体现. 狭义的封装:一个类的某些属性, ...

  5. Python类总结-封装(私有属性,方法)

    封装基础 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装 只让自己的对象能调用自己类中的方法 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装) 把 ...

  6. Python——类的封装

    class Gun: def __init__(self, model): # 1. 枪的型号 self.model = model # 2. 子弹的数量 self.bullet_count = 0 ...

  7. 【python】面向对象编程之@property、@setter、@getter、@deleter用法

    @property装饰器作用:把一个方法变成属性调用 使用@property可以实现将类方法转换为只读属性,同时可以自定义setter.getter.deleter方法 @property&@ ...

  8. 类的封装(property)

    封装 封装程序的主要原因:保护隐私:而封装方法的主要原因是:隔离复杂的执行过程 property的特性 将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执 ...

  9. python 全栈开发,Day22(封装,property,classmethod,staticmethod)

    一.封装 封装 : 广义上的 :把一堆东西装在一个容器里 狭义上的 :会对一种现象起一个专门属于它的名字 函数和属性装到了一个非全局的命名空间 —— 封装 隐藏对象的属性和实现细节,仅对外提供公共访问 ...

随机推荐

  1. angularjs结合plupload实现文件上传

    转载注明:(罗志强的博客) angularjs的指令directive非常好使,可以很方便的结合各种插件,实现很强大的功能. 今天用到了plupload,就拿它举例吧. 正常的plupload用法应该 ...

  2. Linux下打包压缩war和解压war包 zip和jar

    ============jar================= 把当前目录下的所有文件打包成game.warjar -cvfM0 game.war ./ -c   创建war包-v   显示过程信息 ...

  3. [LeetCode] 28. Implement strStr() ☆

    Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle ...

  4. Python输出字符串或文件颜色显示

    书写格式,和相关说明如下: 格式:\033[显示方式;前景色;背景色m 说明: 前景色 背景色 颜色 --------------------------------------- 30 40 黑色 ...

  5. 【BZOJ】2440: [中山市选2011]完全平方数

    [题意]T次询问第k小的非完全平方数倍数的数.T<=50,k<=10^9.(即无平方因子数——素因数指数皆为0或1的数) [算法]数论(莫比乌斯函数) [题解]考虑二分,转化为询问[1,x ...

  6. 【BZOJ】1040: [ZJOI2008]骑士 环套树DP

    [题意]给定n个人的ai和bi,表示第i个人能力值为ai且不能和bi同时选择,求能力值和最大的选择方案.n<=10^6. [算法]环套树DP(基环树) [题解]n个点n条边——基环森林(若干环套 ...

  7. hihoCoder 1174 : 拓扑排序·一

    题目链接:http://hihocoder.com/problemset/problem/1174 题目是中文题面我就不说题意了,要看题面的请点击上方链接~ 代码实现如下: #include < ...

  8. 快速幂取模_C++

    一.题目背景 已知底数a,指数b,取模值mo 求ans = ab % mo 二.朴素算法(已知可跳过) ans = 1,循环从 i 到 b ,每次将 ans = ans * a % mo 时间复杂度O ...

  9. Go语言 6 结构体、方法和接口

    文章由作者马志国在博客园的原创,若转载请于明显处标记出处:http://www.cnblogs.com/mazg/ Go学习群:415660935 结构体(struct)是由一系列具有相同类型或不同类 ...

  10. MySQL数据库的“十宗罪”【转】

    今天就给大家列举 MySQL 数据库中最经典的十大错误案例,并附有处理问题的解决思路和方法.希望能给刚入行或数据库爱好者一些帮助,今后再遇到任何报错,我们都可以很淡定地去处理.学习任何一门技术的同时, ...