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

主题资源网站建设 反思wordpress windows伪静态

主题资源网站建设 反思,wordpress windows伪静态,wordpress发布文章404,seo推广的特点在Java中,通常在类中定义的成员变量为私有变量,在类的实例中不能直接通过对象.属性直接操作,而是要通过getter和setter来操作私有变量。 而在Python中,因为有property这个概念,所以不需要写getter和setter一堆重复的代…

在Java中,通常在类中定义的成员变量为私有变量,在类的实例中不能直接通过对象.属性直接操作,而是要通过getter和setter来操作私有变量。

而在Python中,因为有property这个概念,所以不需要写getter和setter一堆重复的代码来操作私有变量。Python“私有变量”通常在变量前加上“_”或者“__”,例如_attr或者__attr,这是约定俗成的规范。

把私有属性变成只读特性

class MyClass:def __init__(self, x):self._x = x

这里定义了一个MyClass类,它有一个实例变量_x,绑定了用户传来的x值。_x是私有变量,通过obj._x获取私有变量不符合语言规范,进而我们要使_x变成property(特性),通过obj.x直接访问。

改造后的代码如下:

class MyClass:def __init__(self, x):self._x = x@propertydef x(self):return self._x>>> obj = MyClass(10)
>>> obj.x
10

我们把_x变成了property特性,以只读的方式获取x的值。

我们现在想为x赋值该怎样做呢?

>>> obj.x = 999
Traceback (most recent call last):File "xxx", line 14, in <module>obj.x = 23
AttributeError: can't set attribute

可以看到,抛出了AttributeError: can't set attribute。显然,只读方法不支持赋值。

把私有变量变成可赋值的特性

我们只需要在上述代码改造成:

class MyClass:def __init__(self, x):self._x = x@propertydef x(self):return self._x@x.setterdef x(self, value):self._x = value
>>> obj = MyClass(10)
>>> obj.x = 999
>>> obj.x
999

可以看到,我们为x添加了setter,可以直接为obj.x赋值操作。

property属性能够遮盖实例属性

继续上面的代码,我们看看以下的操作:

>>> obj = MyClass(10)
>>> obj.__dict__
{'_x': 999}  #此时实例变量中有_x的值
>>> obj.__dict__['x'] = 99999  #设置obj的实例变量有x值,跟property属性重名!
>>> obj.__dict__
{'_x': 999, 'x': 99999}  #此时实例变量中有_x和x的值
>>> obj.x     #结果是obj的实例变量还是property属性?
10

如上代码所示,obj对象有一个_x实例变量和一个x的property属性,我们又强行为obj增加了一个x实例变量,这个实例变量x和property属性x同名!

通过obj.x我们得知,返回的是property属性,说明property属性会遮盖实例属性!也可以理解为property属性的优先级更大!

property类解析

我们通常使用内置的@property装饰器。但其实property是一个类,python中类和函数的调用方式都差不多,他们都是可调用对象。

property的构造方法如下:

class property(object):def __init__(self, fget=None, fset=None, fdel=None, doc=None):""""""

它接受4个参数,都可以为空。

第一个为getter,第二个为setter,第三个为delete函数,第四个为文档。

上述代码的另一种写法

class MyClass:def __init__(self, x):self._x = xdef get_x(self):return self._xdef set_x(self, value):self._x = valuex = property(get_x, set_x)
>>> obj = MyClass(10)
>>> obj.x
10

如上,x是property的实例,设置了getter和setter,作为类变量放在MyClass类中。

以上就是property属性的解析。

http://www.sczhlp.com/news/141306/

相关文章:

  • 倒计时网站模板网页制作软件dw与python软件对比
  • 什么网站做教育的比较多微信小程序开发如何制作
  • 江苏省医院网站建设管理规范建设网站域名备案
  • 徐州做英文网站的公司做外贸哪些网站可以发布产品
  • 亚马逊做网站发礼物换评价开发一个网站的步骤流程
  • 网站修改数据文登城乡建设局网站
  • 建论坛网站需要多少空间网络广告策划流程有哪些
  • xyz域名做网站好么wordpress技术服务
  • 西宁做网站_君博相约dell公司网站建设的特点
  • 旅游便宜网站建设普通网站 多大空间
  • 免费网站开发软件网站公告建设方案
  • 四川省城镇建设二次供水网站南京尔顺科技发展有限公司表扬信息开网站做备案需要什么资料
  • 有哪些网站做的很有特色市场营销计划方案
  • 电子政务网站代码wordpress 中国 加速
  • linux下nginx
  • 9.27
  • 做网站 就上凡科建站如何看网站做的好坏
  • 南宁本地有几家网站开发Wordpress编辑工具
  • 龙华网站建设推广网站支付怎么做的
  • 海南省建设培训与职业资格注册中心网站国家备案查询
  • 小程序免费网站石家庄做网站wsjz
  • 网站被黑解决方案与网站建立的链接不安全怎么办
  • 百色住房和城乡建设部网站专门做网页设计网站
  • 深圳 做公司网站营销型网站模板免费下载
  • 云南最便宜的网站建设绍兴高端网站设计
  • 免费建站网站一级在线看双鸭山网站建设企业
  • 国内网站模板wordpress 删除数据库
  • 金昌网站建设自适应网站设计尺寸
  • 婚庆公司网站建设总结报告北京专业做网站设计公司
  • 全国网站备案拍照3合1网站建设公司