装饰器property的简单运用
property函数:在类中使用,将类中的方法伪装成一个属性
使用方法:在函数,方法,类的上面一行直接@装饰器的名字
装饰器的分类:
装饰器函数
装饰器方法:property
装饰类
class Student:
def __init__(self,name):
self.__name = name
@property
def name(self):
return self.__name
@name.setter #设置,修改(自我理解)
def name(self,new_name):
if type(new_name) is str: #只有当修改的值为str类型,才能被修改
self.__name = new_name
a1 = Student("诸葛")
print(a1.name) #诸葛
a1.name = "睿智"
print(a1.name) #睿智
a1.name = 123
print(a1.name) #睿智
setter的用法:
setter是只有被property方法之后的,又实现了一个同名的方法,且被setter装饰器装饰了
它的作用是用来保护一个变量,在修改的时候能够添加一些保护条件。
deleter的用法:
一个方法被伪装成属性后,应该可以执行一个属性的增删改查操作,
所以deleter就是对应着被deleter装饰的方法,这个方法并不是只为了删除这个属性,而是你在代码中执行什么就有什么效果。
class Goods:
__discount = 0.8
def __init__(self,price):
self.__price = price
@property
def price(self):
return self.__price * self.__discount
@price.setter
def price(self,new):
if type(new) is int:
self.__price = new
@price.deleter
def price(self):
del self.__price
apple = Goods(10)
print(apple.price) #8.0
print(apple.__dict__) #{'_Goods__price': 10}
apple.price = 20 #将__price的值进行修改
print(apple.price) #16
print(apple.__dict__) #{'_Goods__price': 20}
del apple.price #删除
print(apple.__dict__) #{}
deleter通常用在
class A:
def __init__(self):
self.__f = open('aaa','w') @property
def f(self):
return self.__f @f.deleter
def f(self):
self.__f.close() #先关闭文件
del self.__f #删除文件
@classmethod 将类中的方法变成类方法,为了不创建类对象,而直接用类方法修改静态私有属性。用法如下
只使用类中的资源,且这个资源可以直接用类名引用的使用,那这个方法在方法上面@classmethod将这个方法变成类方法
class Goods:
__discount = 0.8 #静态私有属性
def __init__(self,price):
self.__price = price #私有对象属性
self.name = "apple" #对象属性
@property
def price(self):
return self.__price *Goods.__discount @classmethod #类方法
def change_disount(cls,new): #cls 表示Goods这个类
cls.__discount = new #对Goods中的静态私有属性进行修改
print(Goods.__dict__) # '_Goods__discount': 0.8,
Goods.change_disount(0.7)
print(Goods.__dict__) #'_Goods__discount': 0.7,
@staticmethod 静态方法 (如果函数要在类中使用,就用静态方法)
class Student:
@staticmethod #在类中创建函数
def login(usr,pwd):
print('IN LOGIN',usr,pwd)
Student.login('user','pwd')
总结
# 类:
# 静态属性 类 所有的对象都统一拥有的属性
# 类方法 类 如果这个方法涉及到操作静态属性、类方法、静态方法 cls 表示类
# 静态方法 类 普通方法,不使用类中的命名空间也不使用对象的命名空间 : 一个普通的函数 没有默认参数
# 方法 对象 self 表示对象
# property方法 对象 slef 表示对象
isinstance(a,A) 判断对象与类直接的关系
issubclass(A,B) 判断类与类之间的关系
class A:pass
class B(A):pass
a = A()
b = B()
# print(type(a) is A) #True
# print(type(b) is B) #True
# print(type(b) is A) #False # print(isinstance(a,A)) #True #isinstance判断对象a与类A的关系(自我理解)
# print(isinstance(b,A)) #True
# print(isinstance(a,B)) #False
print(issubclass(B,A)) #True
print(issubclass(A,B)) #False 判断类与类之间的关系
装饰器property的简单运用的更多相关文章
- python学习之类和实例的属性;装饰器@property
无论是类还是实例,一切皆是对象. Python是强动态语言,和java在这点上有所不同. class Ab(): a = 666 # 定义类对象Ab,自带属性a,值为666 # 使用Ab.__dict ...
- python基础语法16 面向对象3 组合,封装,访问限制机制,内置装饰器property
组合: 夺命三问: 1.什么是组合? 组合指的是一个对象中,包含另一个或多个对象. 2.为什么要用组合? 减少代码的冗余. 3.如何使用组合? 耦合度: 耦: 莲藕 ---> 藕断丝连 - 耦合 ...
- Python 基础之面向对象之装饰器@property
一.定义 装饰器@property可以把方法变成属性使用作用: 控制类内成员的获取 设置 删除获取 @property设置 @自定义名.setter删除 @自定义名.deleter 二.具体实现 1. ...
- 使用装饰器@property
1.在绑定属性时,如果我们直接把属性暴露出去,虽然写起来很简单,但是,没办法检查参数,导致可以把成绩随便改: s = Student() s.score = 98s.score = 1000 # 属性 ...
- Python 装饰器 property() 函数
描述:property() 函数的作用是在新式类中返回属性值. @property 装饰器简单理解就是负责把一个方法变成属性调用 下面理解property()方法语法: class property( ...
- Python内置装饰器@property
在<Python装饰器(Decorators )>一文中介绍了python装饰器的概念,日常写代码时有一个装饰器很常见,他就是内置的@property. 我们一步步的来接近这个概念. 一个 ...
- Python的私有变量与装饰器@property的用法
Python的私有变量是在变量前面加上双横杠(例如:__test)来标识, Python私有变量只能在类内部使用,不被外部调用,且当变量被标记为私有后,调用时需再变量的前端插入类名,在类名前添加一个下 ...
- python装饰器--@property
@property 考察 Student 类: class Student(object): def __init__(self, name, score): self.name = name sel ...
- 11.python描述符---类的装饰器---@property
描述符1.描述符是什么:描述符本质就是一个新式类,在这个新式类中,至少实现了__get__(),__set__(),__delete__()这三个内置方法中的一个,描述符也被称为描述符协议(1):__ ...
随机推荐
- 用Java中的File类模拟实现对系统文件的增删改查效果
码字不易,三连支持一波吧 IO操作向来是各大语言的热区,而对文件的操作也是重中之重. 那么在Java中也给我们提供了很多关于文件操作的类.今天我就用一个比较基本的File类来模拟实现对文件的增删改查效 ...
- redis(一)-----初识redis
Redis是一种基于键值对(key-value)的NoSQL数据库 因为Redis会将所有数据都存放在内存 中,所以它的读写性能非常惊人.不仅如此,Redis还可以将内存的数据利 用快照和日志的形式保 ...
- MYSQL数据表损坏的原因分析和修复方法小结
MYSQL数据表损坏的原因分析和修复方法小结 1.表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. ...
- Java的泛型机制
Java的泛型机制 泛型是 Java 从 JDK5 开始引入的新特性,本质上是参数化类型,即所操作的数据类型被指定为一个参数.这意味着编写的代码可以被很多不同类型的对象所重用. 1. 泛型的使用方式 ...
- zabbix密码复杂度有效期安全增强,符合三级等保要求。
一.关于三级等保要求 1.zabbix默认没有设置密码复杂度功能,密码有效期功能. 2.zabbix具备失败处理功能,但是没有页面手动调试,需要修改源代码. 3.zabbix具备超时退出功能. 二.整 ...
- ASP.NET Core 6框架揭秘实例演示[11]:诊断跟踪的几种基本编程方式
在整个软件开发维护生命周期内,最难的不是如何将软件系统开发出来,而是在系统上线之后及时解决遇到的问题.一个好的程序员能够在系统出现问题之后马上定位错误的根源并找到正确的解决方案,一个更好的程序员能够根 ...
- awvas启动不起来解决方案
当双击桌面的"Acunetix图标",自动打开浏览器跳转页面,结果页面显示"无法访问此网站"按Windows+R键输入services.msc打开服务界面查看A ...
- Meterpreter核心命令
实验目的 掌握Meterpreter常见的基本命令的使用 实验原理 1.Meterpreter介绍 meterpreter是metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻 ...
- 传统式BI工具和自助式BI工具到底有什么区别
相信很多人都听说过BI工具,但是你听说过自助BI工具吗?自助式BI工具面向没有IT背景的业务分析师,比传统的BI工具灵活易用,在一定程度上摆脱了对IT部门的大幅度依赖,使数据产品链更加大众化,更加理解 ...
- Java的诞生历史
Java帝国的诞生 1.1972年C诞生 贴近硬件,运行极快,效率极高 操作系统,编译器,数据库,网络系统等都采用C语言 但是,它的指针和内存管理给程序员安上了"枷锁".它的指针没 ...