热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

装饰器property的简单运用

property函数:在类中使用,将类中的方法伪装成一个属性使用方法:在函数,方法,类的上面一行直接装饰器的名

property函数:在类中使用,将类中的方法伪装成一个属性

使用方法:在函数,方法,类的上面一行直接@装饰器的名字

装饰器的分类:

  装饰器函数

  装饰器方法:property

  装饰类

class Student:def __init__(self,name):self.__name = name@propertydef 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.8def __init__(self,price):self.__price = price@propertydef price(self):return self.__price * self.__discount@price.setterdef price(self,new):if type(new) is int:self.__price = new@price.deleterdef 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')@propertydef f(self):return self.__f@f.deleterdef 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" #对象属性@propertydef 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 判断类与类之间的关系

 

  

  

转:https://www.cnblogs.com/yuncong/p/9562784.html



推荐阅读
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • Tornado框架中模块与静态文件的应用
    本文详细介绍了Tornado框架中模块和静态文件的使用方法。首先明确模块与模板的区别,然后通过具体的代码示例展示如何在HTML文档中使用模块,并配置模块的路由。最后,提供了模块类中参数获取的示例。 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • 在多线程并发环境中,普通变量的操作往往是线程不安全的。本文通过一个简单的例子,展示了如何使用 AtomicInteger 类及其核心的 CAS 无锁算法来保证线程安全。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 通过优化动态网络Cookies的全网互通机制,实现了用户在任意子站点的登录和注销操作均能同步至整个网络。具体实现涉及对三个关键文件的修改:首先,在`incDv_ClsMain.asp`中定位并调整`Response.Cookies`的相关设置;其次,更新`global.asa`以确保会话状态的一致性;最后,修改`login.asp`以支持跨域认证。这一改进不仅提升了用户体验,还增强了系统的安全性和可靠性。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • 用阿里云的免费 SSL 证书让网站从 HTTP 换成 HTTPS
    HTTP协议是不加密传输数据的,也就是用户跟你的网站之间传递数据有可能在途中被截获,破解传递的真实内容,所以使用不加密的HTTP的网站是不 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • C++ 异步编程中获取线程执行结果的方法与技巧及其在前端开发中的应用探讨
    本文探讨了C++异步编程中获取线程执行结果的方法与技巧,并深入分析了这些技术在前端开发中的应用。通过对比不同的异步编程模型,本文详细介绍了如何高效地处理多线程任务,确保程序的稳定性和性能。同时,文章还结合实际案例,展示了这些方法在前端异步编程中的具体实现和优化策略。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 在Java Web服务开发中,Apache CXF 和 Axis2 是两个广泛使用的框架。CXF 由于其与 Spring 框架的无缝集成能力,以及更简便的部署方式,成为了许多开发者的首选。本文将详细介绍如何使用 CXF 框架进行 Web 服务的开发,包括环境搭建、服务发布和客户端调用等关键步骤,为开发者提供一个全面的实践指南。 ... [详细]
author-avatar
兴霖先玲广_215
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有