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

惠州3d网站建设全景seo 网站推广

惠州3d网站建设全景,seo 网站推广,社区网站建设平台,高端品牌vi设计公司本文主要介绍Python高阶知识中的属性管理,这部分知识在常规Python编程中用的很少,但对于想深度了解Python甚至有志于自己编写实用框架的人,还是很有必要的,并且如果掌握了,对日常的代码学习等也会有一定好处。 本文结…

本文主要介绍Python高阶知识中的属性管理,这部分知识在常规Python编程中用的很少,但对于想深度了解Python甚至有志于自己编写实用框架的人,还是很有必要的,并且如果掌握了,对日常的代码学习等也会有一定好处。

本文结合笔者的经验,以及参考各种专业书籍和文章博客,抽丝剥茧,去掉可能导致混淆不清甚至错误的信息,归总而成,不再废话,直接上文。

一、属性管理概述

属性管理机制主要是为控制对类属性的访问、更新、删除等的操作,借此可实现对属性访问行为的定制化控制,或者变相实现真正的私有属性或变量的需求。

Python随着版本更新和功能演变迭代,大体实现了3大类的属性管理机制,对应应用场景和抽象程度各有不同,以下会分别介绍。

二、具体属性管理手段

2.1 魔法函数重载方法

2.1.1 __setattr__及__getattribute__

这种机制主要借助于Python解释器中属性设置和访问对应魔法函数相关机制:

  1. Python在访问类或对象属性时,会自动调用__getattribute__魔法函数,当有的时候就返回,没有对应属性的时候,会再调用下面会讲的__getattr__魔法函数
  2. python在设置或更新属性时,会自动调用__setattr__魔法函数(当然,在设置之前,还是会调用__getattribute__魔法函数确认属性存在)
  3. 所以可在以上魔法函数内,实现自定义的属性访问及更新等控制机制
class A:def __init__(self):self.name='dennis'def __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.name='dennis'def __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(f'error:访问的{key}不存在')

2.2 property内置及延伸方法

2.2.1 property内置方法

上面介绍的通过魔法函数进行属性管理,是对所有属性都进行了管理,本部分主要介绍对指定属性进行管理的机制,也即property内置方法,直接上代码

class A:def __init__(self):self.__name='dennis'def setName(self,value):self.__name=valuedef getName(self):return self.__namedef delName(self):del self.delNamename=property(fget=getName,fset=setName,fdel=delName)

以上代码实现了对name属性的访问、更新、删除的管理,本质类似是一种委托机制,最终修改的是self.__name这个私有属性。

2.2.2 @property装饰器

@property装饰器,是property方法的一种语法变体,最终作用相同,直接贴代码:

class A:def __init__(self):self.__name='dennis'@propertydef name(self):return self.__name@name.setterdef name(self,value):self.__name=value@name.deleterdef name(self):del self.__name

2.3 描述符机制

描述符机制是相对来说抽象程度最深的属性管理机制,其可复用,可继承派生,本质来说,描述符是一种类,这种类内包含有__get__、__set__、__delete__方法的任意一个,而该类的实例会被作为拥有者(owner,即制定属性所属对象)的类属性,当拥有者访问对应属性时,会自动调用描述符类对应的方法。

以上描述比较抽象,具体上代码:

class StringField:def __init__(self,string):self.__string=stringdef __get__(self,instance_obj,owner_class):print('__get__')return self.__stringdef __set__(self,instance_obj,value):print('__set__')self.__string=valuedef __delete__(self,instance_obj):print('__delete__')del self.__stingclass A:name=StringField('dennis')a=A()a.name
a.name='tony'
del a '''
会依次打印出
__get__
__set__
__delete__
'''

以上代码要点解释如下:

  1. StringField类,即所谓的描述符类,因其包含了指定的方法,其中
    1. __get__方法内的instance_obj即所属拥有者类对象实例(a)
    2. owner_class即所属拥有者类(A)
    3. 可通过这两者访问拥有者类或实例对象的属性或方法
  2. 在类A内,定义类类属性name,是StringField的实例对象,故
    1. 当访问、更新、删除类A实例对象a的name属性时,即会自动调用描述符类StringField对应的方法
  3. 通过以上例子和解释,大家其实会发现,Django框架内的Field,其本质就是一种描述符类,所属拥有者即具体Model类型,Model实例化对象访问这些属性时,会自动调用Field描述符类对应的方法,具体对数据库操作的业务逻辑,就是在这些方法内实现的

所以,了解甚至熟悉描述符,对更好的理解和使用流行框架也是大有益处的。

2.4 其他相关知识

2.4.1 __slots__控制实例对象可定义属性

这个内置属性,可以控制某类实例对象(注意,不包含类属性,以及方法)可定义的属性名范围。相较于不使用__slots__,可显著提升属性访问速度,如果在设计类时,已明确有哪些实例属性,可采用该方式框死属性范围,避免误操作并提升代码执行效率。

class D:__slots__=['name']age=10

如上代码,D类的实力对象只能定义和使用name属性,如果定义其他属性,会引发AttributeError

http://www.wooajung.com/news/27939.html

相关文章:

  • 新乡网站建设哪家好品牌营销平台
  • 网站开发公司名单武汉seo收费
  • 宁波妇科中医有没有免费的seo网站
  • php网站打开速度慢怀化seo推广
  • 网站建设与维护心得百度网盘网页版登录入口官网
  • 软件产品如何做网站推广爱链
  • 公司网站友情链接怎么做副链一站式自媒体服务平台
  • wordpress版本查询南昌seo快速排名
  • 做游戏的网站的公司百度推广图片尺寸要求
  • 自己动手的网站淘宝摄影培训推荐
  • 自建网站做淘宝联盟游戏代理平台一天结一次
  • 杭州好的公司网站设计易推客app拉新平台
  • h5个人网站模板源码沈阳seo技术
  • 做服装要看国外哪些网站免费推广软件工具
  • 门户网站怎么开发微信引流获客软件
  • 替别人做网站管理员东莞网站推广策划
  • 阿里云做外贸网站浙江疫情最新消息
  • 做的好的营销型网站有哪些项目营销推广方案
  • 网页制作教程电子书惠州百度seo在哪
  • 网页制作怎么做多个网站环球网今日疫情消息
  • 老外做摄影网站花多少钱海外推广解决方案
  • 网页微博怎么回到旧版梅州seo
  • 红色旅游网站页面建设网络推广专员岗位职责
  • 给个网站靠谱点2021免费推广平台有哪些
  • 沧州做网站哪家公司好seo搜索引擎排名优化
  • 法律网站建设价格百度seo竞价推广是什么
  • 工程建设招标中心网站百度关键词批量看排名工具
  • 网站做cdnseoaoo
  • 德阳建设厅官方网站友情链接怎么设置
  • 17一起做网店网站潮汕网页设计软件