当前位置: 首页 > news >正文

温州网站建设这个个人做旅游网站的意义

温州网站建设这个,个人做旅游网站的意义,城市焦点商城网站建设案例,wordpress换地址本文主要介绍Python高阶知识中的属性管理#xff0c;这部分知识在常规Python编程中用的很少#xff0c;但对于想深度了解Python甚至有志于自己编写实用框架的人#xff0c;还是很有必要的#xff0c;并且如果掌握了#xff0c;对日常的代码学习等也会有一定好处。 本文结…本文主要介绍Python高阶知识中的属性管理这部分知识在常规Python编程中用的很少但对于想深度了解Python甚至有志于自己编写实用框架的人还是很有必要的并且如果掌握了对日常的代码学习等也会有一定好处。 本文结合笔者的经验以及参考各种专业书籍和文章博客抽丝剥茧去掉可能导致混淆不清甚至错误的信息归总而成不再废话直接上文。 一、属性管理概述 属性管理机制主要是为控制对类属性的访问、更新、删除等的操作借此可实现对属性访问行为的定制化控制或者变相实现真正的私有属性或变量的需求。 Python随着版本更新和功能演变迭代大体实现了3大类的属性管理机制对应应用场景和抽象程度各有不同以下会分别介绍。 二、具体属性管理手段 2.1 魔法函数重载方法 2.1.1 __setattr__及__getattribute__ 这种机制主要借助于Python解释器中属性设置和访问对应魔法函数相关机制 Python在访问类或对象属性时会自动调用__getattribute__魔法函数当有的时候就返回没有对应属性的时候会再调用下面会讲的__getattr__魔法函数python在设置或更新属性时会自动调用__setattr__魔法函数当然在设置之前还是会调用__getattribute__魔法函数确认属性存在所以可在以上魔法函数内实现自定义的属性访问及更新等控制机制 class A:def __init__(self):self.namedennisdef __getattribute__(self,key):#注意这里需要使用super调用对应方法否则会循环调用陷入死循环return super().__getattribute__(key)def __setattr__(self,key,value):#这里可以使用以下两种方式进行属性值更新self.__dict__[key]valuesuper().__setattr__(key,value) 2.1.2 __getattr__ 以下代码即演示添加了对访问类或对象不存在的属性时自动调用的__getattr__魔法函数在此可以添加自己的控制或者处理业务逻辑 class A:def __init__(self):self.namedennisdef __getattribute__(self,key):#注意这里需要使用super调用对应方法否则会循环调用陷入死循环return super().__getattribute__(key)def __setattr__(self,key,value):#这里可以使用以下两种方式进行属性值更新self.__dict__[key]valuesuper().__setattr__(key,value)def __getattr__(self,key):raise AttributeError(ferror访问的{key}不存在)2.2 property内置及延伸方法 2.2.1 property内置方法 上面介绍的通过魔法函数进行属性管理是对所有属性都进行了管理本部分主要介绍对指定属性进行管理的机制也即property内置方法直接上代码 class A:def __init__(self):self.__namedennisdef setName(self,value):self.__namevaluedef getName(self):return self.__namedef delName(self):del self.delNamenameproperty(fgetgetName,fsetsetName,fdeldelName) 以上代码实现了对name属性的访问、更新、删除的管理本质类似是一种委托机制最终修改的是self.__name这个私有属性。 2.2.2 property装饰器 property装饰器是property方法的一种语法变体最终作用相同直接贴代码 class A:def __init__(self):self.__namedennispropertydef name(self):return self.__namename.setterdef name(self,value):self.__namevaluename.deleterdef name(self):del self.__name 2.3 描述符机制 描述符机制是相对来说抽象程度最深的属性管理机制其可复用可继承派生本质来说描述符是一种类这种类内包含有__get__、__set__、__delete__方法的任意一个而该类的实例会被作为拥有者owner即制定属性所属对象的类属性当拥有者访问对应属性时会自动调用描述符类对应的方法。 以上描述比较抽象具体上代码 class StringField:def __init__(self,string):self.__stringstringdef __get__(self,instance_obj,owner_class):print(__get__)return self.__stringdef __set__(self,instance_obj,value):print(__set__)self.__stringvaluedef __delete__(self,instance_obj):print(__delete__)del self.__stingclass A:nameStringField(dennis)aA()a.name a.nametony del a 会依次打印出 __get__ __set__ __delete__以上代码要点解释如下 StringField类即所谓的描述符类因其包含了指定的方法其中 __get__方法内的instance_obj即所属拥有者类对象实例aowner_class即所属拥有者类A可通过这两者访问拥有者类或实例对象的属性或方法在类A内定义类类属性name是StringField的实例对象故 当访问、更新、删除类A实例对象a的name属性时即会自动调用描述符类StringField对应的方法通过以上例子和解释大家其实会发现Django框架内的Field其本质就是一种描述符类所属拥有者即具体Model类型Model实例化对象访问这些属性时会自动调用Field描述符类对应的方法具体对数据库操作的业务逻辑就是在这些方法内实现的 所以了解甚至熟悉描述符对更好的理解和使用流行框架也是大有益处的。 2.4 其他相关知识 2.4.1 __slots__控制实例对象可定义属性 这个内置属性可以控制某类实例对象注意不包含类属性以及方法可定义的属性名范围。相较于不使用__slots__可显著提升属性访问速度如果在设计类时已明确有哪些实例属性可采用该方式框死属性范围避免误操作并提升代码执行效率。 class D:__slots__[name]age10如上代码D类的实力对象只能定义和使用name属性如果定义其他属性会引发AttributeError
http://www.hkea.cn/news/14298796/

相关文章:

  • 玉溪市网站建设网站建设朱宁
  • 99到家微网站什么做的建设运营平台网站的方法
  • 如何生成一个网站wordpress靶机
  • 北京门户网站制作公司企业网站开发成本
  • 怎么提升网站加载速度网站涉及敏感视频等该怎么做
  • 一个人做网站原型建立网站软件
  • 如何对网站的图片做cdn网站内容页面怎么做的
  • 昆明个人网站建设平台十大免费行情软件下载网站
  • 牡丹江制作网站百度h5官网
  • 网站界面分类怎么做公司网站推广
  • 不备案怎么做淘宝客网站吗网站跨平台
  • 有好看图片的软件网站模板wordpress下不了插件
  • 怎样找到网站建设设置模板北京网站排名公司
  • 商务局网站建设方案建国内外网站有什么区别
  • 广州网站营销推广设计淘宝电脑版
  • 北京网站建设 找奥美通全网营销开发一套网站系统 多少钱
  • 网站后台分模块做门户网站服务器选择
  • 网站建设流程的过程自学考试网站建设与管理
  • 网站论坛怎么建设哪些网站做企业招聘不要花钱
  • 做网站后期要收维护费吗北京网站建设 性价比
  • 昆明网站建设织梦西安北郊做网站
  • 硬盘做免费嗳暧视频网站图书馆网站开发的前期准备
  • 中英双语网站建设合同网站不备案可以上线吗
  • 惠州网站建设外包动态ip网站如何备案
  • 昆山网站建设方案优化公司pr模板网
  • 负责公司网站建设的岗位叫什么商标设计网址
  • 旅游海外推广网站建设方案龙之向导的发展前景
  • 各大网站网址20m做网站
  • 黑色网站欣赏深圳网站推广公司
  • 找工地项目承包网站软件工程属于什么专业类别