Python类总结-封装(Property, setter, deleter)
Property
#property
#内置装饰器函数,只在面向对象中使用
from math import pi
class Circle:
def __init__(self,r ):
self.r = r
@property
def perimeter(self):#property属性不能传递任何参数
return 2*pi*self.r
@property
def area(self):
return self.r**2*pi
c1 = Circle(5)
# print(c1.area()) #不加property目前定义的是个方法,圆的面积应该是属性,故用@property装饰
print(c1.perimeter) #调用不用加()
print(c1.area)
利用Setter修改Property装饰的变量
class Person:
def __init__(self, name):
self.__name = name
@property
def name(self):
return self.__name + 'sb'
@name.setter #定义一个方法.setter,必须和property装饰同名的方法
def name(self,new_name):
self.__name = new_name
#实现了property装饰的变量的修改操作
tiger = Person('泰哥')
print(tiger.name)
tiger.name = '全部'
print(tiger.name)
>>>>
泰哥sb
全部sb

- Property的实际应用场景 --某个属性需要经过一些计算或操作而得出的结果,通常定义为一个方法然后用Property装饰
class Goods:
discount = 0.5
def __init__(self,name, price):
self.name = name
self.__price = price #折扣前价格定义为私有的
@property
def price(self): #折扣后的价格定义为一个方法并用property装饰,进行一些操作
return self.__price*Goods.discount
apple = Goods('苹果', 5)
print(apple.price)
Property的删除-deleter
class Person:
def __init__(self,name):
self.__name = name
@property
def name(self):
return self.__name
@name.deleter #property装饰的变量.deleter
def name(self):
del self.__name#执行删除私有变量
@name.setter #设置一个新的变量
def name(self,new_name): #可以传递一个变量
self.__name = new name
brother2 = Person('二哥')
print(brother2.name)
del brother2.name #删除某个私有变量
print(brother2.name)
>>>>
二哥
File "C:/Users/jwang2/PycharmProjects/PlayPy/Demo/S9-day25-封装.py", line 139, in <module>
print(brother2.name)
File "C:/Users/jwang2/PycharmProjects/PlayPy/Demo/S9-day25-封装.py", line 131, in name
return self.__name
AttributeError: 'Person' object has no attribute '_Person__name'

Python类总结-封装(Property, setter, deleter)的更多相关文章
- python 类的封装/property类型/和对象的绑定与非绑定方法
目录 类的封装 类的property特性 类与对象的绑定方法与非绑定方法 类的封装 封装: 就是打包,封起来,装起来,把你丢进袋子里,然后用绳子把袋子绑紧,你还能拿到袋子里的那个人吗? 1.隐藏属性和 ...
- 孤荷凌寒自学python第二十三天python类的封装
孤荷凌寒自学python第二十三天python类的封装 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.从怎么样访问类的内部代码块中定义的私有属性说起 类中定义的私有属性和私有方法是无法被 ...
- python类的封装
Python之类的封装 1. 什么是封装 装:往容器/名称空间里存入名字 封:代表将存放于名称空间中的名字给藏起来,这种隐藏对外不对内(怎么做到的,在下文解释) 2. 为何要封装 封数据属性:不想要给 ...
- python类的封装与继承
封装 关注公众号"轻松学编程"了解更多. 1.概念 面向对象语言的三大特征:封装, 继承, 多态. 广义的封装: 类和函数的定义本身就是封装的体现. 狭义的封装:一个类的某些属性, ...
- Python类总结-封装(私有属性,方法)
封装基础 广义上面向对象的封装:代码的保护,面向对象的思想本身就是一种封装 只让自己的对象能调用自己类中的方法 狭义上的封装-面向对象三大特性之一(私有变量,用公有的方法封装私有属性,方法叫封装) 把 ...
- Python——类的封装
class Gun: def __init__(self, model): # 1. 枪的型号 self.model = model # 2. 子弹的数量 self.bullet_count = 0 ...
- 【python】面向对象编程之@property、@setter、@getter、@deleter用法
@property装饰器作用:把一个方法变成属性调用 使用@property可以实现将类方法转换为只读属性,同时可以自定义setter.getter.deleter方法 @property&@ ...
- 类的封装(property)
封装 封装程序的主要原因:保护隐私:而封装方法的主要原因是:隔离复杂的执行过程 property的特性 将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执 ...
- python 全栈开发,Day22(封装,property,classmethod,staticmethod)
一.封装 封装 : 广义上的 :把一堆东西装在一个容器里 狭义上的 :会对一种现象起一个专门属于它的名字 函数和属性装到了一个非全局的命名空间 —— 封装 隐藏对象的属性和实现细节,仅对外提供公共访问 ...
随机推荐
- 关于变长数组的一点小想法-C语言定义数组但是数组长度不确定怎么办
很多数据机构,比如栈,链表等,都可以动态分配存储空间 那么数组呢?一般声明时都要指定数组长度,那么数组可以实现动态分配么? 假设数组存的是int型 那么 你先申请10个元素 int* a = (int ...
- SpringCloud(二)注册服务提供者搭建
上文已经写了如何去搭建注册中心,仅有注册中心是远远不够的,所以我们需要注册到注册中心并提供服务的节点,这里称为注册服务提供者 前提 阅读上文,并成功搭建注册中心,环境无需改变 项目搭建 这里我们需要新 ...
- 03.WebView演练-iOS开发Demo(示例程序)源代码
技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong //转载请注明出处--本文永久链接:h ...
- Sublime之插件的安装(一)
由于最近刚换了一个工作,所以决定重新申请一个blog,把工作当中遇到的一些问题记录下来,方便自己下次忘记,也希望能与一起需要的小伙伴一起共勉. 如果有不同的观点或者是不同的看法,大家都可以畅谈,我一直 ...
- 47、Python面向对象中的继承有什么特点?
继承的优点: 1.建造系统中的类,避免重复操作. 2.新类经常是基于已经存在的类,这样就可以提升代码的复用程度. 继承的特点: 1.在继承中基类的构造(__init__()方法)不会被自动调用,它需要 ...
- javac -cp java -cp
///////////////////////////////////////////////////////////////////////////////////// 编译java文件的命令都知道 ...
- Angular 2.0 基础:服务
什么是服务(Service) 在Angular 2 中我们提到的服务 service 一般指的是 哪些能够被其他组件或者指令调用的 单一的,可共享的 代码块.当然,通过服务可以将数据和组件分开,这样就 ...
- http://www.onvif.org/onvif/ver20/util/operationIndex.html
http://www.onvif.org/onvif/ver20/util/operationIndex.html
- python并发编程之gevent协程(四)
协程的含义就不再提,在py2和py3的早期版本中,python协程的主流实现方法是使用gevent模块.由于协程对于操作系统是无感知的,所以其切换需要程序员自己去完成. 系列文章 python并发编程 ...
- cin循环输入控制问题
之前写一个简单的输入节点值自动生成链表的测试程序,发现cin的输入控制好像在VC++6.0和VS2010中不一样,特此记录. 现在有以下代码: vector<int> ivec; int ...