本文关键阐述了python中的特性管理模式,主要包含私有属性和特性局限-__slots__方式,原文中阐述了python中怎样去声明变量的基本知识,必须的小伙伴可以借鉴一下
一、私有属性
Python并没真正意义上的民营化适用,但可以用下横线获得伪私,其中一项大部分Python编码都遵照的好习惯:含有下横线,作为前缀的名字应被称作非公开的API中的一部分(不论是函数公式、方式或是数据成员)
python中私并无法实现真正意义上的私,只不过是在储存属性情况下改了一个名称,在外部不能直接方式
私有属性主要表现为:
_参数名:声明式私有属性
__参数名:_类名+私有属性名
classAttributes: attr=100 #声明式私有属性 _attr2=999 #_类名+私有属性名 __attr3=888 print(Attributes.attr) print(Attributes._attr2)
双下划线的私有属性,去启用时,并没__attr3这一属性名,用dict特性,去查询特性词典看看:
能够看见是双下划线的私有属性是:_类名+私有属性名
二、特性局限-__slots__方式
界定过slots属性来局限类案例的特性,只有关联slots特定的特性,不可以加上slots以外的特性
加上slots以外的特性,就会直接出错
classDemo:
应用__slots__给目标做特性局限,只有加上特定特性name,age
__slots__=['name','age'] m=Demo() m.name=111 m.age=18 print(m.name,m.age) 前去加上特定特性以外的特性 m.sex=男
执行结果:
出错:AttributeError:‘Demo’objecthasnoattribute‘sex’目标Demo并没有‘sex’这一特性
三、python中怎样去声明变量
词法:主要参数,属性种类
比如:a:int=[11,22,3]主要参数a,为非int,数值[11,22,3]
python中能够声明变量或参数种类,但实际上执行命令一般不会去校检种类
a:int="python"#设定的为int种类,可是传值为字符串类型 b:str=11#设定的为字符串类型,可是传值为int种类 c:list={11,22,33}#设定的为列表,可是传值为词典 print(a,b,c)#==========》依然可以实行打印出来 #函数参数的类型声明: defwork(name:str,age:int):#设定的为字符串类型和int种类 print('name的数值',name) print('age的数值',age) #实际传参一个列表,一个词典 work([11,22,33],{'a':1,'b':2})
执行结果:
四、python中的有关特性
__getattr__方式:
使用方法:获得特性,特性不会有时开启的办法
独特步骤:当去获得特性时,先实行__getattribute__去看是否有特性,有就回到,假如没有的话去行动__getattr__方式,回到特性不会有
getattribute(self,item):
使用方法:特性浏览开启的魔术师方式,搜索特性时,首位时间能启用此方法
setattr(self,key,value): 使用方法:设定属性方式,设定特性时,启用此方法设定特性 __delattr__方式: 使用方法:在del删除特性时开启,删除属性方式 classMyDemo(object): def__getattribute__(self,item): """ 特性浏览开启的魔术师方式 :paramitem:获取的属性名 :return:获取到的属性值 """ print("您要获得的特性为:",item) value=super().__getattribute__(item)#继承父类 returnvalue def__setattr__(self,key,value): """ 设定属性方式 :paramkey:属性名 :paramvalue:属性值 :return: """ print("您要设定的属性名{},属性值为:{}".format(key,value)) super().__setattr__(key,value) def__delattr__(self,item): """ 删除属性方式 :paramitem:属性名 :return: """ print("您要删除的特性为:",item) super().__delattr__(item) def__getattr__(self,item): """ 获得特性,特性不会有时开启的办法 :paramitem: :return: """ print("获得的特性{},不会有".format(item)) return99 m=MyDemo() print("*************************特性设定******************************") #特性设定 #设定特性方式一: m.aa=999 m.name='musen' #设定特性方式二:setattr方式: setattr(MyDemo(),'age',18) print("************************获得特性*******************************") #获得特性 #方式一: print(m.aa) print(m.name) #方式二:getattr方式 print(getattr(m,'name')) print("************************删除特性********************************") #删除特性 #方式一: delm.aa #方式二:delattr方式 delattr(m,'age')
综上所述,这篇文章就给大家介绍到这里了,希望可以给大家带来帮助。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/130282.html
... 环境准备 系统:Ubuntu 17.04 x64 Docker 17.12.0-ce ,Docker Compose python3 IP:198.13.48.154 域名:hub.ymq.io,此域名需要dns 解析到198.13.48.154 作为私有仓库地址 本文出现的所有:hub.ymq.io 域名。使用时候请替换成自己的域名 Docker 环境 在部署私...
1,引言 本文讲解怎样用Python驱动Firefox浏览器写一个简易的网页数据采集器。开源Python即时网络爬虫项目将与Scrapy(基于twisted的异步网络框架)集成,所以本例将使用Scrapy采集淘宝这种含有大量ajax代码的网页数据,但是要...
...栏目如期跟大家见面了。 先来看看今天的主角是谁:《Python源码剖析——深度探索动态语言核心技术》,2008年出版,作者 @陈儒 ,评分8.7分。 是的,你没看错,出版年份2008年。这本书基于Python2.5,到了十年后3.7版本的年代,...
...栏目如期跟大家见面了。 先来看看今天的主角是谁:《Python源码剖析——深度探索动态语言核心技术》,2008年出版,作者 @陈儒 ,评分8.7分。 是的,你没看错,出版年份2008年。这本书基于Python2.5,到了十年后3.7版本的年代,...
...己的工作是非常必要的。相对于shell的简单、perl的飘逸,Python是一种严谨的高级语言。其具备上手快、语法简单、扩展丰富、跨平台等多种优点。很多人把它称为一种“胶水”语言,通过大量丰富的类库、模块,可以快速搭建出...
阅读 531·2023-01-14 11:38
阅读 374·2023-01-14 11:04
阅读 274·2023-01-14 10:57
阅读 336·2023-01-14 10:48
阅读 360·2023-01-14 10:40
阅读 837·2023-01-14 10:34
阅读 424·2023-01-14 10:24
阅读 368·2023-01-14 10:18