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

长治网站制作平台设计网站栏目

长治网站制作平台,设计网站栏目,大连网络推广平台,本地免费发布信息网站目录 1、什么是描述器? 1、原始的代码可以理解成为这样: 2、增加解释器可以改成如下,解释器就是集增删改查为一体的一个小的property 有一点需要注意的地方是:property里面内置的参数不是get_age()就是不用调用。 3、装饰器可…

目录

1、什么是描述器?

1、原始的代码可以理解成为这样:

2、增加解释器可以改成如下,解释器就是集增删改查为一体的一个小的property

有一点需要注意的地方是:property里面内置的参数不是get_age()就是不用调用。

3、装饰器可以也放在前面

一些小注意和补缺:self.age=value会发生无限递归,为什么 self.__age = value不会发生无限递归?

4、有一个封装的思想,我觉得以后可能非常重要!!!

5、但是这样写的话,Age()这个就是共享的了


1、什么是描述器?

其实是一个类里面的属性,指向一个特殊的对象,但是这个对象具有:增,删,改,查四种实例方法。在外界尝试去操作一个描述器,解释器会去判断是否是一个描述器,如果是,会自动把外界的赋值操作转化成__Set__操作,转化的操作是解释器自己完成的。不需要人为的操作

1、原始的代码可以理解成为这样:

class Person:def __init__(self):self.__age = 10def get_age(self):return self.__agedef set_age(self,value):if value < 0:value = 0self.age = valuedef del_age(self):del self.__age
p = Person()
p.set_age(-100)
print(p.get_age())
p.del_age()
print(p.get_age())

2、增加解释器可以改成如下,解释器就是集增删改查为一体的一个小的property

class Person:def __init__(self):self.__age = 10def get_age(self):return self.__agedef set_age(self,value):if value < 0:value = 0self.__age = valuedef del_age(self):del self.__ageage = property(get_age,set_age,del_age)name = 'sz'
p = Person()
p.age = 19
print(p.age)

有一点需要注意的地方是:property里面内置的参数不是get_age()就是不用调用。

3、装饰器可以也放在前面

class Person:def __init__(self):self.__age = 10@propertydef age(self):return self.__age@age.setterdef age(self,value):if value < 0:value = 0self.__age = value@age.deleterdef age(self):del self.__age# age = property(get_age,set_age,del_age)# name = 'sz'
p = Person()
p.age = 19
print(p.age)

一些小注意和补缺:self.age=value会发生无限递归,为什么 self.__age = value不会发生无限递归?

答:self.age = value是设置值,self.__age = value是访问私有变量,为啥是访问私有变量?因为在python内部有一个名字重整机制,就是会把__age改成 _类名__age因此,self.__age = value 其实是直接访问了重命名后的属性 _类名__age,而不是通过属性的 setter 方法来设置。这就避免了无限递归的问题。但需要注意的是,这种方式是一种绕过属性的 getter 和 setter 方法的机制,可能会绕过属性的其他逻辑,因此在使用时需要谨慎考虑。

4、有一个封装的思想,我觉得以后可能非常重要!!!

class Age:def __init__(self):self.__age = 10def get_age(self):return self.__agedef set_age(self,value):if value < 0:value = 0self.__age = valuedef del_age(self):del self.__ageclass Person:age = Age()p = Person()
p.age = 19
print(p.age)

另外一个封装的案例

class Age:def __get__(self, instance, owner):print('get')def __set__(self, instance, value):print('set')def __delete__(self, instance):print('我被删除啦')
class Person:age = Age()
p = Person()
p.age = 10
print(p.age)

上面那块的增删改查,全部被封装在Age的这个函数里面了,下面只需要直接调用就可以了~

class的Age也是一个类,但是在Person那块也是一个类,所以可以试着去调用类的方法看看能不能触发set和del的属性

class Age:def __get__(self, instance, owner):print('get')def __set__(self, instance, value):print('set')def __delete__(self, instance):print('我被删除啦')
class Person:age = Age()
# p = Person()
# p.age = 10
# print(p.age)
print(Person.age)
Person.age = 19
del Person.age

结果如下:只会获得,但是不会,set和del了,所以以后用装饰器的时候,还是用对象去操作比较好!

5、但是这样写的话,Age()这个就是共享的了

http://www.yayakq.cn/news/648694/

相关文章:

  • 如何让网站被收录柳州网站建设哪家好
  • 做网站官网好处如何上传网站程序
  • 网站数据分析视频天津中冀建设集团有限公司网站
  • 网站建设在哪里进行专业团队海报
  • 佛山网站维护wordpress 手机首页
  • 石家庄做网络推广的网站个人店铺名字大全
  • 做翻页电子书的网站图书馆网站建设的建议
  • 网站模版 带 手机版网站的橱窗怎么做
  • 网址和网站的区别wordpress投资主题
  • 做网站送的小程序有什么用做货代的有哪些网站
  • 网站建设课件微营销app
  • 定制高端网站建设设计响应式网页怎么设计
  • 果蔬网站规划建设方案高端摄影网站模板
  • 网站访问量有什么用菏泽建设局网站
  • 杭州知名网站建设公司众筹网站建设方案模板
  • 开发软件的网站WordPress添加内容评论可见
  • 当当网网站建设智慧城市网站建设
  • 比较优秀的国外wordpress网站知乎建站平台
  • vs2010 c 网站开发深圳网站设计技术
  • wordpress网站标签logo网站服务器租用价格怎么算
  • 某物流网站后台源码免费ppt模板公众号
  • 网站推广昔年下拉天水网站制作
  • 深圳网站建设推荐微信公众平台小程序注销
  • 网站备案中兖州住房与城乡建设局网站
  • 那种系统做网站比较好广州最大网站建设
  • dede网站头部不显示调用的名称佛山制作网站公司吗
  • 外包网站开发wordpress字不能
  • 网站页面数怎么做什么是网页和网站
  • 网站需求分析模板托管网站费用
  • 织梦绿色企业网站模板前端需要学什么