热门标签 | 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



推荐阅读
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 本文介绍了iOS数据库Sqlite的SQL语句分类和常见约束关键字。SQL语句分为DDL、DML和DQL三种类型,其中DDL语句用于定义、删除和修改数据表,关键字包括create、drop和alter。常见约束关键字包括if not exists、if exists、primary key、autoincrement、not null和default。此外,还介绍了常见的数据库数据类型,包括integer、text和real。 ... [详细]
  • 本文由编程笔记小编整理,主要介绍了使用Junit和黄瓜进行自动化测试中步骤缺失的问题。文章首先介绍了使用cucumber和Junit创建Runner类的代码,然后详细说明了黄瓜功能中的步骤和Steps类的实现。本文对于需要使用Junit和黄瓜进行自动化测试的开发者具有一定的参考价值。摘要长度:187字。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文介绍了Java中Currency类的getInstance()方法,该方法用于检索给定货币代码的该货币的实例。文章详细解释了方法的语法、参数、返回值和异常,并提供了一个示例程序来说明该方法的工作原理。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
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社区 版权所有